--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cms/src/CCMSX509Signed.cpp Tue Jan 26 15:20:08 2010 +0200
@@ -0,0 +1,199 @@
+/*
+* Copyright (c) 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:
+*
+*/
+
+
+// INCLUDE FILES
+#include "CCMSX509Signed.h"
+#include "CCMSX509AlgorithmIdentifier.h"
+// CONSTANTS
+const TInt KNumberOfSubModules = 3;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CCMSX509Signed::CCMSX509Signed
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CCMSX509Signed::CCMSX509Signed( )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509Signed::BaseConstructL
+// Constructs the member variables. Makes copies.
+// -----------------------------------------------------------------------------
+//
+void CCMSX509Signed::BaseConstructL(
+ const CCMSX509AlgorithmIdentifier& aAlgorithmIdentifier,
+ const TDesC8& aEncrypted )
+ {
+ SetAlgorithmIdentifierL( aAlgorithmIdentifier );
+ SetEncryptedL( aEncrypted );
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509Signed::SignAndPopLC
+// Creates a signed encoder.
+// -----------------------------------------------------------------------------
+//
+CASN1EncSequence* CCMSX509Signed::SignAndPopLC(
+ CASN1EncBase* aToBeSigned ) const
+ {
+ CASN1EncSequence* root = CASN1EncSequence::NewLC();
+
+ // encode toBeSigned
+ root->AddChildL( aToBeSigned );
+
+ CleanupStack::Pop( 2 ); // root, aToBeSigned
+ CleanupStack::PushL( root );
+
+ // encode algorithmIdentifier AlgorithmIdentifier
+ CASN1EncBase* algId = iAlgorithmIdentifier->EncoderLC( );
+ root->AddAndPopChildL( algId );
+
+ // encode encrypted ENCRYPTED-HASH{ToBeSigned}
+ CASN1EncBitString* encrypted = CASN1EncBitString::NewLC( *iEncrypted );
+ root->AddAndPopChildL( encrypted );
+
+ return root;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509Signed::DecodeSignatureL
+// Decodes algorithmIdentifier and encrypted parts from the raw data.
+// -----------------------------------------------------------------------------
+//
+TASN1DecGeneric CCMSX509Signed::DecodeSignatureL(
+ const TDesC8& aRawData,
+ CCMSX509AlgorithmIdentifier*& aAlgorithmIdentifier,
+ HBufC8*& aEncrypted ) const
+ {
+ CArrayPtr< TASN1DecGeneric >* itemList = DecodeSequenceLC(
+ aRawData, KNumberOfSubModules, KNumberOfSubModules );
+
+ TASN1DecGeneric retVal =
+ DecodeSignatureArrayL( *itemList, aAlgorithmIdentifier, aEncrypted );
+
+ CleanupStack::PopAndDestroy( itemList );
+
+ return retVal;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509Signed::DecodeSignatureArrayL
+// Decodes algorithmIdentifier and encrypted parts from the array.
+// -----------------------------------------------------------------------------
+//
+TASN1DecGeneric CCMSX509Signed::DecodeSignatureArrayL(
+ CArrayPtr< TASN1DecGeneric >& aItemArray,
+ CCMSX509AlgorithmIdentifier*& aAlgorithmIdentifier,
+ HBufC8*& aEncrypted ) const
+ {
+ TInt sequenceCounter = 0;
+
+ // ToBeSigned will be returned
+ TASN1DecGeneric retVal( *aItemArray.At( sequenceCounter++ ) );
+
+ // decode algorithmIdentifier
+ CCMSX509AlgorithmIdentifier* algId = CCMSX509AlgorithmIdentifier::NewL( );
+ CleanupStack::PushL( algId );
+ algId->DecodeL( aItemArray.At( sequenceCounter++ )->Encoding() );
+
+ // decode encrypted
+ TASN1DecBitString bsDecoder;
+ HBufC8* encrypted =
+ bsDecoder.ExtractOctetStringL( *( aItemArray.At( sequenceCounter ) ) );
+
+ // change parameter pointers
+ aAlgorithmIdentifier = algId;
+ aEncrypted = encrypted;
+ CleanupStack::Pop( algId );
+
+ return retVal;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509Signed::~CCMSX509Signed
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CCMSX509Signed::~CCMSX509Signed()
+ {
+ delete iAlgorithmIdentifier;
+ delete iEncrypted;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509Signed::AlgorithmIdentifier
+// algorithmIdentifier getter
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const CCMSX509AlgorithmIdentifier&
+CCMSX509Signed::AlgorithmIdentifier() const
+ {
+ return *iAlgorithmIdentifier;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509Signed::Encrypted
+// encrypted getter
+// -----------------------------------------------------------------------------
+//
+EXPORT_C const TDesC8& CCMSX509Signed::Encrypted() const
+ {
+ return *iEncrypted;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509Signed::SetAlgorithmIdentifierL
+// AlgorithmIdentifier setter
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CCMSX509Signed::SetAlgorithmIdentifierL(
+ const CCMSX509AlgorithmIdentifier& aAlgorithmIdentifier )
+ {
+ CCMSX509AlgorithmIdentifier* algorithmIdentifier =
+ CCMSX509AlgorithmIdentifier::NewL(
+ aAlgorithmIdentifier.AlgorithmIdentifier() );
+ CleanupStack::PushL( algorithmIdentifier );
+ const CAlgorithmIdentifier* digestAlgorithm =
+ aAlgorithmIdentifier.DigestAlgorithm();
+ if( digestAlgorithm )
+ {
+ algorithmIdentifier->SetDigestAlgorithmL( digestAlgorithm );
+ }
+ CleanupStack::Pop( algorithmIdentifier );
+ delete iAlgorithmIdentifier;
+ iAlgorithmIdentifier = algorithmIdentifier;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509Signed::SetEncryptedL
+// encrypted setter
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CCMSX509Signed::SetEncryptedL(
+ const TDesC8& aEncrypted )
+ {
+ HBufC8* encrypted = aEncrypted.AllocL();
+ delete iEncrypted;
+ iEncrypted = encrypted;
+ }
+
+// End of File