diff -r 000000000000 -r 95b198f216e5 drm_plat/roap_api/inc/RoapEng.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/drm_plat/roap_api/inc/RoapEng.h Thu Dec 17 08:52:27 2009 +0200 @@ -0,0 +1,235 @@ +/* +* Copyright (c) 2002-2004 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: ?Description +* +*/ + + +#ifndef ROAP_ENG_H +#define ROAP_ENG_H + +// INCLUDES + +#include +#include + +#include +#include +#include + +// FORWARD DECLARATIONS +class CDrmProtectedRoParser; +class RDRMClockClient; +class CDcfRep; +class CX509Certificate; +class COCSPResponse; + +namespace Roap +{ +class CRoapParser; +class CRoapSigner; +class CRIHello; +class CRegistrationResp; +class CRightsResp; +class CJoinDomainResp; +class CLeaveDomainResp; +class RRoapStorageClient; + + +// CLASS DECLARATION +class CRoapEng: public CRoapEngBase + { + + public: // Constructors and destructor + + /** + * Two-phased constructor. + */ + IMPORT_C static CRoapEng* NewL( ); + + /** + * Destructor. + */ + IMPORT_C ~CRoapEng(); + + protected: + + // Needed in trigger parsing phase + + CRoapTrigger* ParseTriggerL( const TDesC8& aXmlTrigger ); + + void GetRIContextL( TBool& aRegistered, const TDesC8& aRiId ); + + void GetDomainContextL( TBool& aIsJoined, + TBool& aIsValidGeneration, + const TDesC8& aDomainId ); + + + + // For creating ROAP requests + + void CreateReqMessageL(); + + CRoapMessage* CreateDeviceHelloL(); + + CRoapMessage* CreateRegistrationRequestL(); + + CRoapMessage* CreateRightsRequestL(); + + CRoapMessage* CreateJoinDomainRequestL(); + + CRoapMessage* CreateLeaveDomainRequestL(); + + CRoapMessage* CreateMeteringReportRequestL(); + + + // For handling ROAP responses + + void HandleRoapResponseL( const TDesC8& aXmlResponse ); + + void HandleRIHelloPduL( const TDesC8& aRiHello ); + + void HandleReqResponsePduL( const TDesC8& aRegResp ); + + void HandleRightsResponsePduL( const TDesC8& aRightsResp, TBool aOnePass ); + + void HandleJoinDomainResponsePduL( const TDesC8& aJoinResp ); + + void HandleLeaveDomainResponsePduL( const TDesC8& aLeaveResp ); + + void HandleMeteringReportResponsePduL( const TDesC8& aMeteringResp ); + + void HandleMultipartL(); + + + // For signing and certificate checking + + HBufC8* SignMessageL( const TDesC8& aMessage ) const; + + TBool VerifySignatureL( const TDesC8& aMessage, + const TDesC8& aSignature, + const RPointerArray< HBufC8 >& aCertificateChain ) const; + + TBool VerifyTriggerSignatureL( const TDesC8& aXmlTrigger, + const CRoapTrigger& aTrigger ) const; + + TBool VerifyCertificateChainL( const RPointerArray< HBufC8 >& aCertificateChain, + const RPointerArray< HBufC8 >& aOcspResponses ) const; + + TBool VerifyOcspResponsesL( const RPointerArray< HBufC8 >& aOcspResponses, + const TDesC8& aRiCaCert, + const RPointerArray< HBufC8 >& aCertSerialNums ) const; + + TBool VerifyOcspCertChainL( COCSPResponse& aResponse, + const TDesC8& aRootCert, + CX509Certificate*& aOcspCert ) const; + + TBool ValidateRiCertificateL( const CX509Certificate* aCert ); + + + // For fetching data for ROAP requests + + RPointerArray GetCertificateChainL() const; + + RPointerArray GetSupportedAlgorithmsL() const; + + void GetDeviceDetailsL( HBufC8*& aManufacturer, + HBufC8*& aModel, + HBufC8*& aVersion ); + + HBufC8* GetOCSPResponderKeyHashL() const; + + + // For transaction tracking + + void FetchTransactionIDL( RPointerArray& aTransIDs, + RPointerArray& aContentIDs ); + + void InsertTransactionIDL( RPointerArray& aTransIDs, + RPointerArray& aContentIDs ); + + + // For fetching and setting DRM Time + + TTime GetDrmTimeL(); + + void SetDrmTimeSecureL(); + + void AdjustDrmTimeL( const RPointerArray< HBufC8 >& aOcspResponses, + TDesC8& aRegReqNonce ) const; + + + // For storing a Domain RO in implicit Join Domain case + void StoreDomainRightsL(); + + // Inserting domain ROs after receiving + void InsertDomainRosL(); + + // For mapping ROAP status to error code + TInt MapStatusL(); + + // For checking is the root certificate issued by CMLA + void IsTimeUpdateAllowedL( const RPointerArray& aCertChain, + const RPointerArray& aOcspResponses, + TBool& aIsAllowed ) const; + + + TBool ValidateRiIdL( TDesC8& aRiId, TDesC8& aCertBuf ); + + // Update the status of transaction tracking variable + void UpdateTransactionTrackingStatusL(); + + // Creates list of device IDs for Multi-PKI + TInt CreateDeviceIdHashArrayL( RPointerArray& aIdArray); + + private: + + CRoapEng(); + + void ConstructL(); + + enum TTransStatus + { + ENotAsked, + EForbidden, + EAllowed + }; + + private: + + CRoapParser* iParser; + CRoapSigner* iSigner; + RRoapStorageClient* iStorageClient; + RDRMClockClient* iClockClient; + CDcfRep* iDcfRep; + TInt iRoapStatus; + CDrmProtectedRoParser* iRoParser; + TBool iCertNeeded; + TBool iRiSupportsCertCaching; + HBufC8* iDeviceId; + TTransStatus iTransStatus; + TKeyTransportScheme iSelectedAlgorithms; + TBuf8< SHA1_HASH > iSelectedRoot; + TBuf8< KDomainIdLength > iDomainId; + TBuf8< SHA1_HASH > iRiId; + TBuf8< KMaxRoapVersionLength > iRiVersion; + RPointerArray< HBufC8 > iRiAlgorithms; + TBool iDeviceTimeError; + TBuf8< KDeviceNonceLength > iRegReqNonce; // for DRM Time sync + TBool iSecureTime; + TInt iZone; + }; +} + +#endif /* def ROAP_ENG_H */