drm_plat/roap_api/inc/RoapEng.h
changeset 0 95b198f216e5
--- /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 <e32base.h>
+#include <hash.h>
+
+#include <RoapMessage.h>
+#include <RoapEngBase.h>
+#include <Oma2Agent.h>
+
+// 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<HBufC8> GetCertificateChainL() const;
+		
+		RPointerArray<HBufC8> GetSupportedAlgorithmsL() const;
+		
+		void GetDeviceDetailsL( HBufC8*& aManufacturer,
+                                HBufC8*& aModel,
+                                HBufC8*& aVersion );
+                                         
+        HBufC8* GetOCSPResponderKeyHashL() const;
+                                
+        
+        // For transaction tracking
+        
+        void FetchTransactionIDL( RPointerArray<HBufC8>& aTransIDs,
+                                  RPointerArray<HBufC8>& aContentIDs );
+        
+        void InsertTransactionIDL( RPointerArray<HBufC8>& aTransIDs,
+                                   RPointerArray<HBufC8>& 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<HBufC8>& aCertChain,
+                                   const RPointerArray<HBufC8>& 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<TDesC8>& 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 */