diff -r 000000000000 -r 164170e6151a cms/src/CCMSIssuerAndSerialNumber.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cms/src/CCMSIssuerAndSerialNumber.cpp Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,189 @@ +/* +* Copyright (c) 2002 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 "CCMSIssuerAndSerialNumber.h" +#include +#include +#include + +// CONSTANTS +const TInt KNumberOfSubModules = 2; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CCMSIssuerAndSerialNumber::CCMSIssuerAndSerialNumber +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +EXPORT_C CCMSIssuerAndSerialNumber::CCMSIssuerAndSerialNumber() + { + } + +// ----------------------------------------------------------------------------- +// CCMSIssuerAndSerialNumber::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CCMSIssuerAndSerialNumber::ConstructL( + const CX500DistinguishedName& aIssuerName, + const TDesC8& aSerialNumber ) + { + SetIssuerNameL( aIssuerName ); + SetSerialNumberL( aSerialNumber ); + } + +// ----------------------------------------------------------------------------- +// CCMSIssuerAndSerialNumber::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CCMSIssuerAndSerialNumber* CCMSIssuerAndSerialNumber::NewL() + { + // creating with empty values + CArrayPtr* empty = + new(ELeave) CArrayPtrFlat( 1 ); + CleanupStack::PushL( empty ); + CX500DistinguishedName* issuer = CX500DistinguishedName::NewL( *empty ); + CleanupStack::PushL( issuer ); + CCMSIssuerAndSerialNumber* self = NewL( *issuer, KNullDesC8() ); + CleanupStack::PopAndDestroy( issuer ); + CleanupStack::PopAndDestroy( empty ); + return self; + } + +// ----------------------------------------------------------------------------- +// CCMSIssuerAndSerialNumber::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CCMSIssuerAndSerialNumber* CCMSIssuerAndSerialNumber::NewL( + const CX500DistinguishedName& aIssuerName, + const TDesC8& aSerialNumber ) + { + CCMSIssuerAndSerialNumber* self = + new( ELeave ) CCMSIssuerAndSerialNumber(); + + CleanupStack::PushL( self ); + self->ConstructL( aIssuerName, aSerialNumber ); + CleanupStack::Pop(); + + return self; + } + + +// Destructor +CCMSIssuerAndSerialNumber::~CCMSIssuerAndSerialNumber() + { + delete iIssuerName; + delete iSerialNumber; + } + +// ----------------------------------------------------------------------------- +// CCMSIssuerAndSerialNumber::DecodeL +// Decrypts raw data to this instance +// ----------------------------------------------------------------------------- +void CCMSIssuerAndSerialNumber::DecodeL( const TDesC8& aRawData ) + { + CArrayPtr* itemsData = DecodeSequenceLC( aRawData, + KNumberOfSubModules, + KNumberOfSubModules ); + // we would not get this far if there is not 2 elements + + // decoding name + CX500DistinguishedName* name = + CX500DistinguishedName::NewL( itemsData->At( 0 )->Encoding() ); + delete iIssuerName; + iIssuerName = name; + + // deocoding serial number + TASN1DecGeneric gen( *itemsData->At( 1 ) ); + gen.InitL(); + HBufC8* tmp = gen.GetContentDER().AllocL(); + delete iSerialNumber; + iSerialNumber = tmp; + + CleanupStack::PopAndDestroy( itemsData ); + } + +// ----------------------------------------------------------------------------- +// CCMSIssuerAndSerialNumber::EncoderLC +// Returns ASN1 encoder for this instance +// ----------------------------------------------------------------------------- + +CASN1EncBase* CCMSIssuerAndSerialNumber::EncoderLC() const + { + CASN1EncSequence* root = CASN1EncSequence::NewLC(); + + // add issuer name + CASN1EncSequence* issuerName = iIssuerName->EncodeASN1LC(); + root->AddAndPopChildL( issuerName ); + + // add serial number + CASN1EncOctetString* serial = CASN1EncOctetString::NewLC( *iSerialNumber ); + // changing tag to integer + serial->SetTag( EASN1Integer, EUniversal ); + root->AddAndPopChildL( serial ); + return root; + } + +// ----------------------------------------------------------------------------- +// CCMSIssuerAndSerialNumber::IssuerName +// Issuer name getter +// ----------------------------------------------------------------------------- +EXPORT_C const CX500DistinguishedName& CCMSIssuerAndSerialNumber::IssuerName() const + { + return *iIssuerName; + } + +// ----------------------------------------------------------------------------- +// CCMSIssuerAndSerialNumber::SerialNumber +// Serial number getter +// ----------------------------------------------------------------------------- +EXPORT_C const TDesC8& CCMSIssuerAndSerialNumber::SerialNumber() const + { + return *iSerialNumber; + } + +// ----------------------------------------------------------------------------- +// CCMSIssuerAndSerialNumber::SetIssuerNameL +// Issuer name setter +// ----------------------------------------------------------------------------- +EXPORT_C void CCMSIssuerAndSerialNumber::SetIssuerNameL( + const CX500DistinguishedName& aIssuerName ) + { + CX500DistinguishedName* name = CX500DistinguishedName::NewL( aIssuerName ); + delete iIssuerName; + iIssuerName = name; + } + +// ----------------------------------------------------------------------------- +// CCMSIssuerAndSerialNumber::SetSerialNumber +// Serial number setter +// ----------------------------------------------------------------------------- +EXPORT_C void CCMSIssuerAndSerialNumber::SetSerialNumberL( + const TDesC8& aSerialNumber ) + { + HBufC8* tmp = aSerialNumber.AllocL(); + delete iSerialNumber; + iSerialNumber = tmp; + } + +// End of File