wmdrm/inc/wmdrmkeystorage.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:52:27 +0200
changeset 0 95b198f216e5
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  Declaration of the WMDRM key storage
*
*/


#ifndef WMDRMKEYSTORAGE_H
#define WMDRMKEYSTORAGE_H

#include <e32std.h>
#include <e32base.h>

const TInt KDeviceSpecificKeyLength = 16;

/**
 *  Hardware key storage access via the Security Driver
 *
 *  @since S60 3.2
 */
NONSHARABLE_CLASS( CWmDrmKeyStorage ): public CBase
    {
public:

    /**
    * NewL
    * creates an instance of the CWmDrmKeyStorageClass
    *
    * @param    aKeyIndex   Index of the key to be used
    *           Optional parameter, not currently used   
    * @return   CWmDrmKeyStorage -object
    * @leave    Symbian OS or internal error code
    */
    IMPORT_C static CWmDrmKeyStorage* NewL( TInt aKeyIndex = 0 );
    
    /**
    * GetCertificateL
    * request the device certificate in 8bit buffer 
    * caller responsible for releasing the buffer
    *
    * @return   Device WMDRM certificate in an 8bit buffer
    * @leave    Symbian OS or internal error code
    */
    virtual HBufC8* GetCertificateL() = 0;
    
    /**
    * GetUniqueIdL
    *
    * request a 20byte unique Id such as SHA1 hash of some device 
    * specific value, single Unique Id per device
    *
    * caller is responsible for releasing the buffer 
    *
    * @return   Unique Id in an 8bit buffer
    * @leave    Symbian OS or internal error code
    */    
    virtual HBufC8* GetUniqueIdL() = 0;
    
    /**
    * GetUniqueIdRawL
    *
    * request a 20byte unique Id such as SHA1 hash of some device 
    * specific value, single Unique Id per device base 64 encoded
    * and in a 16bit buffer
    *
    * caller is responsible for releasing the buffer 
    *
    * @return   Base 64 encoded Unique Id in a 16bit buffer
    * @leave    Symbian OS or internal error code
    */     
    virtual HBufC* GetUniqueIdRawL() = 0;
    
    /**
    * GetUniqueIdL
    *
    * request a 20byte unique Id such as SHA1 hash of some device 
    * specific value, single Unique Id per device result is base 64 encoded
    *
    * caller is responsible for releasing the buffer 
    *
    * @return   Unique Id in an 8bit buffer base 64 encoded
    * @leave    Symbian OS or internal error code
    */  
    virtual HBufC8* GetUniqueIdB64L() = 0;

    /**
    * GetPublicKeyL
    *
    * request the WMDRM public key of the device in an 8bit descriptor
    *
    * caller is responsible for releasing the buffer 
    *
    * @return   WMDRM public key in an 8bit buffer
    * @leave    Symbian OS or internal error code
    */    
    virtual HBufC8* GetPublicKeyL() = 0;
    
    /**
    * GetPublicKeyB64L
    *
    * request the WMDRM public key of the device in an 8bit descriptor
    * base 64 encoded
    *
    * caller is responsible for releasing the buffer 
    *
    * @return   WMDRM public key in an 8bit buffer base 64 encoded
    * @leave    Symbian OS or internal error code
    */     
    virtual HBufC8* GetPublicKeyB64L() = 0;

    /**
    * SignEcDsaL
    *
    * Signs the data using the device WMDRM private key
    *
    * caller is responsible for releasing the buffer 
    *
    * @param    aData       Data buffer from which the hash is calculated
    * @return   EcDsa signature in an 8bit descriptor
    * @leave    Symbian OS or internal error code
    */     
    virtual HBufC8* SignEcDsaL( const TDesC8& aData ) = 0;
    
    /**
    * VerifyEcDsaL
    *
    * Verifies using the WMDRM public key that the signature is valid
    *
    * @param    aData       Data buffer from which the hash is calculated
    * @param    aSignature  The signature to be checked against
    * @return   ETrue if the signature check succeeded, 
                EFalse if the signature check failed
    * @leave    Symbian OS or internal error code
    */     
    virtual TBool VerifyEcDsaL( const TDesC8& aData, const TDesC8& aSignature ) = 0;
    
    
    /**
    * VerifyEcDsaL
    *
    * Verifies using the given key that the signature is valid
    *
    * @param    aKey        The key in 8bit buffer to be used for signature
    *                       calculation
    * @param    aData       Data buffer from which the hash is calculated
    * @param    aSignature  The signature to be checked against    
    * @return   ETrue if the signature check succeeded , 
                EFalse if the signature check failed
    * @leave    Symbian OS or internal error code
    */     
    virtual TBool VerifyEcDsaL( const TDesC8& aKey, const TDesC8& aData, const TDesC8& aSignature ) = 0;
    
    
    /**
    * DecryptEcIesL
    *
    * Decrypts the EcIes encrypted data using the device private key
    *
    * caller is responsible for releasing the buffer 
    *
    * @param    aData       Data buffer containing the encrypted data
    * @return   Decrypted data in 8bit descriptor
    * @leave    Symbian OS or internal error code
    */     
    virtual HBufC8* DecryptEcIesL( const TDesC8& aData ) = 0;

    /**
    * EncryptEcIesL
    *
    * Encrypts the data using the device WMDRM private key
    *
    * caller is responsible for releasing the buffer 
    *
    * @param    aData       Data buffer to be encrypted
    * @return   Encrypted data in 8bit descriptor
    * @leave    Symbian OS or internal error code
    */
    virtual HBufC8* EncryptEcIesL( const TDesC8& aData ) = 0;
    
    /**
    * EncryptEcIesL
    *
    * Encrypts the data using the given key
    *
    * caller is responsible for releasing the buffer 
    *
    * @param    aKey        Key to be used for EcIes encryption in an 8bit buffer
    * @param    aData       Data buffer to be encrypted
    * @return   Encrypted data in 8bit descriptor
    * @leave    Symbian OS or internal error code
    */    
    virtual HBufC8* EncryptEcIesL( const TDesC8& aKey, const TDesC8& aData ) = 0;


    /**
    * GetDeviceSpecificKeyL
    *
    * request a device specific 16 byte key in an 8bit descriptor
    *
    * caller is responsible for releasing the buffer 
    *
    * @param    aKey    Device specific 16 byte key in an 8bit buffer
    * @leave    Symbian OS or internal error code
    */  
    virtual void GetDeviceSpecificKeyL(
        TBuf8<KDeviceSpecificKeyLength>& aKey) = 0;

    /**
    * GetSymmetricKeyL
    *
    * request the WMDRM symmetric key from the WMDRM certificate in 
    * an 8bit descriptor
    *
    * caller is responsible for releasing the buffer 
    *
    * @return   WMDRM symmetric key in an 8bit buffer
    * @leave    Symbian OS or internal error code
    */  
    virtual HBufC8* GetSymmetricKeyL() = 0;
    };

#endif // WMDRMKEYSTORAGE_H