--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cms/src/CCMSX509AttributeCertificateInfo.cpp Tue Jan 26 15:20:08 2010 +0200
@@ -0,0 +1,676 @@
+/*
+* 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: X.509 AttributeCertificateInfo type
+*
+*/
+
+
+// INCLUDE FILES
+#include "CCMSX509AttributeCertificateInfo.h"
+#include "CCMSX509IssuerSerial.h"
+#include "CCMSX509GeneralNames.h"
+#include "CCMSX509AlgorithmIdentifier.h"
+#include "CCMSAttribute.h"
+#include <asn1dec.h>
+#include <asn1enc.h>
+
+// CONSTANTS
+const TInt KMinNumberOfSubModules = 6;
+const TInt KMaxNumberOfSubModules = 9;
+const TInt KValidityPeriodModuleCount = 2;
+const TInt KValidityNotBeforeIndex = 0;
+const TInt KValidityNotAfterIndex = 1;
+const TInt KDefaultGranularity = 1;
+const TInt KDefaultVersion = 0; // v1 == 0
+const TTagType KBaseCertificateIDTag = 0;
+const TTagType KSubjectNameTag = 1;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// Destructor
+CCMSX509AttributeCertificateInfo::CAttributeCertificateData::
+~CAttributeCertificateData()
+ {
+ delete iBaseCertificateID;
+ delete iSubjectName;
+ delete iIssuer;
+ delete iSignature;
+
+ if( iAttributes )
+ {
+ iAttributes->ResetAndDestroy();
+ delete iAttributes;
+ }
+
+ delete iIssuerUniqueID;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::CCMSX509AttributeCertificateInfo
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CCMSX509AttributeCertificateInfo::CCMSX509AttributeCertificateInfo()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CCMSX509AttributeCertificateInfo::ConstructL(
+ const CCMSX509IssuerSerial& aBaseCertificateID,
+ const CCMSX509GeneralNames& aIssuer,
+ const CCMSX509AlgorithmIdentifier& aSignature,
+ const TInt aSerialNumber,
+ const TTime& aNotBeforeTime,
+ const TTime& aNotAfterTime,
+ const CArrayPtr< CCMSAttribute >& aAttributes )
+ {
+ iData = new( ELeave ) CAttributeCertificateData();
+ iData->iVersion = KDefaultVersion;
+ SetBaseCertificateIDL( aBaseCertificateID );
+ SetIssuerL( aIssuer );
+ SetSignatureL( aSignature );
+ SetSerialNumber( aSerialNumber );
+ SetNotBeforeTimeL( aNotBeforeTime );
+ SetNotAfterTimeL( aNotAfterTime );
+ SetAttributesL( aAttributes );
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CCMSX509AttributeCertificateInfo::ConstructL(
+ const CCMSX509GeneralNames& aSubjectName,
+ const CCMSX509GeneralNames& aIssuer,
+ const CCMSX509AlgorithmIdentifier& aSignature,
+ const TInt aSerialNumber,
+ const TTime& aNotBeforeTime,
+ const TTime& aNotAfterTime,
+ const CArrayPtr< CCMSAttribute >& aAttributes )
+ {
+ iData = new( ELeave ) CAttributeCertificateData();
+ iData->iVersion = KDefaultVersion;
+ SetSubjectNameL( aSubjectName );
+ SetIssuerL( aIssuer );
+ SetSignatureL( aSignature );
+ SetSerialNumber( aSerialNumber );
+ SetNotBeforeTimeL( aNotBeforeTime );
+ SetNotAfterTimeL( aNotAfterTime );
+ SetAttributesL( aAttributes );
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CCMSX509AttributeCertificateInfo::ConstructL( )
+ {
+ // creating empty/default values
+ CAttributeCertificateData* data = new( ELeave ) CAttributeCertificateData();
+ CleanupStack::PushL( data );
+ data->iVersion = KDefaultVersion;
+ data->iBaseCertificateID = CCMSX509IssuerSerial::NewL();
+ data->iIssuer = CCMSX509GeneralNames::NewL();
+ data->iSignature = CCMSX509AlgorithmIdentifier::NewL();
+ data->iNotBeforeTime.UniversalTime();
+ data->iNotAfterTime.UniversalTime();
+ data->iNotAfterTime+=TTimeIntervalYears( 1 );
+ data->iAttributes = new( ELeave ) CArrayPtrFlat< CCMSAttribute >( 1 );
+ CleanupStack::Pop( data );
+ iData = data;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CCMSX509AttributeCertificateInfo*
+CCMSX509AttributeCertificateInfo::NewL()
+ {
+ // creating with empty values
+ CCMSX509AttributeCertificateInfo* self =
+ new( ELeave ) CCMSX509AttributeCertificateInfo();
+ CleanupStack::PushL( self );
+ self->ConstructL( );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CCMSX509AttributeCertificateInfo*
+CCMSX509AttributeCertificateInfo::NewL(
+ const CCMSX509IssuerSerial& aBaseCertificateID,
+ const CCMSX509GeneralNames& aIssuer,
+ const CCMSX509AlgorithmIdentifier& aSignature,
+ const TInt aSerialNumber,
+ const TTime& aNotBeforeTime,
+ const TTime& aNotAfterTime,
+ const CArrayPtr< CCMSAttribute >& aAttributes )
+ {
+ CCMSX509AttributeCertificateInfo* self =
+ new( ELeave ) CCMSX509AttributeCertificateInfo();
+ CleanupStack::PushL( self );
+ self->ConstructL( aBaseCertificateID, aIssuer, aSignature, aSerialNumber,
+ aNotBeforeTime, aNotAfterTime,
+ aAttributes );
+ CleanupStack::Pop();
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CCMSX509AttributeCertificateInfo*
+CCMSX509AttributeCertificateInfo::NewL(
+ const CCMSX509GeneralNames& aSubjectName,
+ const CCMSX509GeneralNames& aIssuer,
+ const CCMSX509AlgorithmIdentifier& aSignature,
+ const TInt aSerialNumber,
+ const TTime& aNotBeforeTime,
+ const TTime& aNotAfterTime,
+ const CArrayPtr< CCMSAttribute >& aAttributes )
+ {
+ CCMSX509AttributeCertificateInfo* self =
+ new( ELeave ) CCMSX509AttributeCertificateInfo();
+ CleanupStack::PushL( self );
+ self->ConstructL( aSubjectName, aIssuer, aSignature, aSerialNumber,
+ aNotBeforeTime, aNotAfterTime,
+ aAttributes );
+ CleanupStack::Pop();
+
+ return self;
+ }
+
+// Destructor
+CCMSX509AttributeCertificateInfo::~CCMSX509AttributeCertificateInfo()
+ {
+ delete iData;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::DecodeL
+// Decrypts raw data to this instance
+// -----------------------------------------------------------------------------
+void CCMSX509AttributeCertificateInfo::DecodeL( const TDesC8& aRawData )
+ {
+ CAttributeCertificateData* data = new( ELeave ) CAttributeCertificateData();
+ CleanupStack::PushL( data );
+
+ CArrayPtr< TASN1DecGeneric >* itemList = DecodeSequenceLC(
+ aRawData, KMinNumberOfSubModules, KMaxNumberOfSubModules );
+
+ TInt sequenceCounter = 0;
+
+ // decode version
+ TASN1DecGeneric* version = itemList->At( sequenceCounter );
+ TASN1DecInteger intDecoder;
+ if( ( version->Tag() == EASN1Integer ) &&
+ ( version->Class() == EUniversal ) )
+ {
+ data->iVersion =
+ intDecoder.DecodeDERShortL( *version );
+ sequenceCounter++;
+ }
+ else
+ {
+ data->iVersion = KDefaultVersion;
+ }
+
+ // decode subject
+ TASN1DecGeneric* subject = itemList->At( sequenceCounter++ );
+ subject->InitL( );
+ TTagType subjectTag( subject->Tag() );
+ switch( subjectTag )
+ {
+ case KBaseCertificateIDTag:
+ {
+ data->iBaseCertificateID = CCMSX509IssuerSerial::NewL();
+ data->iBaseCertificateID->DecodeL( subject->GetContentDER() );
+ break;
+ }
+ case KSubjectNameTag:
+ {
+ data->iSubjectName = CCMSX509GeneralNames::NewL();
+ data->iSubjectName->DecodeL( subject->GetContentDER() );
+ break;
+ }
+ default:
+ {
+ User::Leave( KErrArgument );
+ }
+ }
+
+ // decode issuer
+ TASN1DecGeneric* issuer = itemList->At( sequenceCounter++ );
+ issuer->InitL();
+ data->iIssuer = CCMSX509GeneralNames::NewL();
+ data->iIssuer->DecodeL( issuer->Encoding() );
+
+ // decode signature
+ TASN1DecGeneric* signature = itemList->At( sequenceCounter++ );
+ signature->InitL();
+ data->iSignature = CCMSX509AlgorithmIdentifier::NewL();
+ data->iSignature->DecodeL( signature->Encoding() );
+
+ // decode serialNumber
+ data->iSerialNumber =
+ intDecoder.DecodeDERShortL( *( itemList->At( sequenceCounter++ ) ) );
+
+ // decode attCertValidityPeriod
+ TASN1DecGeneric* validityPeriodDecoder = itemList->At( sequenceCounter++ );
+ validityPeriodDecoder->InitL();
+ CArrayPtr< TASN1DecGeneric >* validityPeriod = DecodeSequenceLC(
+ validityPeriodDecoder->Encoding(), KValidityPeriodModuleCount,
+ KValidityPeriodModuleCount );
+ TASN1DecGeneralizedTime timeDecoder;
+ data->iNotBeforeTime = timeDecoder.DecodeDERL(
+ *( validityPeriod->At( KValidityNotBeforeIndex ) ) );
+ data->iNotAfterTime = timeDecoder.DecodeDERL(
+ *( validityPeriod->At( KValidityNotAfterIndex ) ) );
+ CleanupStack::PopAndDestroy( validityPeriod );
+
+ // decode attributes
+ TASN1DecGeneric* attributesDecoder = itemList->At( sequenceCounter++ );
+ attributesDecoder->InitL();
+ CArrayPtr< TASN1DecGeneric >* attributes = DecodeSequenceLC(
+ attributesDecoder->Encoding() );
+ TInt attributeCount = attributes->Count();
+ data->iAttributes = new( ELeave ) CArrayPtrFlat< CCMSAttribute >(
+ attributeCount ? attributeCount : KDefaultGranularity );
+ for( TInt i = 0; i < attributeCount; i++ )
+ {
+ TASN1DecGeneric* attributeDecoder = attributes->At( i );
+ attributeDecoder->InitL();
+ CCMSAttribute* attribute = CCMSAttribute::NewLC();
+ attribute->DecodeL( attributeDecoder->Encoding() );
+ data->iAttributes->AppendL( attribute );
+ CleanupStack::Pop( attribute );
+ }
+ CleanupStack::PopAndDestroy( attributes );
+
+ // decode issuerUniqueID
+ if( itemList->Count() > sequenceCounter )
+ {
+ TASN1DecBitString bsDecoder;
+ data->iIssuerUniqueID = bsDecoder.ExtractOctetStringL(
+ *( itemList->At( sequenceCounter ) ) );
+ }
+
+ // all decoded, change state
+ CleanupStack::PopAndDestroy( itemList );
+
+ delete iData;
+ iData = data;
+
+ CleanupStack::Pop( data );
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::EncoderLC
+// Returns ASN1 encoder for this instance
+// -----------------------------------------------------------------------------
+
+CASN1EncBase* CCMSX509AttributeCertificateInfo::EncoderLC() const
+ {
+ CASN1EncSequence* root = CASN1EncSequence::NewLC();
+
+ // encode version
+ CASN1EncInt* version = CASN1EncInt::NewLC( iData->iVersion );
+ root->AddAndPopChildL( version );
+
+ // encode subject
+ CASN1EncBase* subject = NULL;
+ if( iData->iBaseCertificateID )
+ {
+ // encode baseCertificateID [0] IssuerSerial
+ CASN1EncBase* baseCertificateID =
+ iData->iBaseCertificateID->EncoderLC( );
+ CleanupStack::Pop( baseCertificateID );
+ subject = CASN1EncExplicitTag::NewLC(
+ baseCertificateID, KBaseCertificateIDTag );
+ }
+ else
+ {
+ // encode subjectName [1] GeneralNames
+ CASN1EncBase* subjectName = iData->iSubjectName->EncoderLC( );
+ CleanupStack::Pop( subjectName );
+ subject = CASN1EncExplicitTag::NewLC( subjectName, KSubjectNameTag );
+ }
+ root->AddAndPopChildL( subject );
+
+ // encode issuer
+ CASN1EncBase* issuer = iData->iIssuer->EncoderLC();
+ root->AddAndPopChildL( issuer );
+
+ // encode signature
+ CASN1EncBase* signature = iData->iSignature->EncoderLC();
+ root->AddAndPopChildL( signature );
+
+ // encode serialNumber
+ CASN1EncInt* serialNumber = CASN1EncInt::NewLC( iData->iSerialNumber );
+ root->AddAndPopChildL( serialNumber );
+
+ // encode attCertValidityPeriod
+ CASN1EncSequence* validityPeriod = CASN1EncSequence::NewLC( );
+ // encode notBeforeTime
+ CASN1EncGeneralizedTime* notBeforeTime =
+ CASN1EncGeneralizedTime::NewLC( iData->iNotBeforeTime );
+ validityPeriod->AddAndPopChildL( notBeforeTime );
+ //encode notAfterTime
+ CASN1EncGeneralizedTime* notAfterTime =
+ CASN1EncGeneralizedTime::NewLC( iData->iNotAfterTime );
+ validityPeriod->AddAndPopChildL( notAfterTime );
+ root->AddAndPopChildL( validityPeriod );
+
+ // encode attributes SEQUENCE OF Attribute
+ CASN1EncSequence* attributes = CASN1EncSequence::NewLC();
+ TInt attributeCount = iData->iAttributes->Count();
+ for( TInt i = 0; i < attributeCount; i++ )
+ {
+ CCMSAttribute* attribute = iData->iAttributes->At( i );
+ CASN1EncBase* attributeEncoder = attribute->EncoderLC( );
+ attributes->AddAndPopChildL( attributeEncoder );
+ }
+ root->AddAndPopChildL( attributes );
+
+ // encode issuerUniqueID UniqueIdentifier OPTIONAL
+ if( iData->iIssuerUniqueID )
+ {
+ CASN1EncBitString* uniqueID =
+ CASN1EncBitString::NewLC( *( iData->iIssuerUniqueID ) );
+ root->AddAndPopChildL( uniqueID );
+ }
+
+ return root;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::Version()
+// Getter for Version
+// -----------------------------------------------------------------------------
+EXPORT_C TInt CCMSX509AttributeCertificateInfo::Version() const
+ {
+ return iData->iVersion;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::BaseCertificateID()
+// Getter for baseCertificateID
+// -----------------------------------------------------------------------------
+EXPORT_C const CCMSX509IssuerSerial*
+CCMSX509AttributeCertificateInfo::BaseCertificateID() const
+ {
+ return iData->iBaseCertificateID;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::SubjectName()
+// Getter for subjectName
+// -----------------------------------------------------------------------------
+EXPORT_C const CCMSX509GeneralNames*
+CCMSX509AttributeCertificateInfo::SubjectName() const
+ {
+ return iData->iSubjectName;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::Issuer()
+// Getter for Issuer
+// -----------------------------------------------------------------------------
+EXPORT_C const CCMSX509GeneralNames&
+CCMSX509AttributeCertificateInfo::Issuer() const
+ {
+ return *iData->iIssuer;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::Signature()
+// Getter for signature
+// -----------------------------------------------------------------------------
+EXPORT_C const CCMSX509AlgorithmIdentifier&
+CCMSX509AttributeCertificateInfo::Signature() const
+ {
+ return *iData->iSignature;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::SerialNumber()
+// Getter for serialNumber
+// -----------------------------------------------------------------------------
+EXPORT_C TInt
+CCMSX509AttributeCertificateInfo::SerialNumber() const
+ {
+ return iData->iSerialNumber;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::NotBeforeTime()
+// Getter for notBeforeTime
+// -----------------------------------------------------------------------------
+EXPORT_C const TTime& CCMSX509AttributeCertificateInfo::NotBeforeTime() const
+ {
+ return iData->iNotBeforeTime;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::NotAfterTime()
+// Getter for notAfterTime
+// -----------------------------------------------------------------------------
+EXPORT_C const TTime& CCMSX509AttributeCertificateInfo::NotAfterTime() const
+ {
+ return iData->iNotAfterTime;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::Attributes()
+// Getter for Attributes
+// -----------------------------------------------------------------------------
+EXPORT_C const CArrayPtr<CCMSAttribute>&
+CCMSX509AttributeCertificateInfo::Attributes() const
+ {
+ return *iData->iAttributes;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::IssuerUniqueID()
+// Getter for subjectName
+// -----------------------------------------------------------------------------
+EXPORT_C const TDesC8*
+CCMSX509AttributeCertificateInfo::IssuerUniqueID() const
+ {
+ return iData->iIssuerUniqueID;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::SetVersion()
+// Setter for version
+// -----------------------------------------------------------------------------
+EXPORT_C void CCMSX509AttributeCertificateInfo::SetVersion(
+ const TInt aVersion )
+ {
+ iData->iVersion = aVersion;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::SetBaseCertificateIDL()
+// Setter for baseCertificateID, deletes also subjectName
+// -----------------------------------------------------------------------------
+EXPORT_C void CCMSX509AttributeCertificateInfo::SetBaseCertificateIDL(
+ const CCMSX509IssuerSerial& aBaseCertificateID )
+ {
+ CCMSX509IssuerSerial* id = CCMSX509IssuerSerial::NewL(
+ aBaseCertificateID.Issuer(), aBaseCertificateID.Serial() );
+ CleanupStack::PushL( id );
+ const TDesC8* uid = aBaseCertificateID.IssuerUID();
+ if( uid )
+ {
+ id->SetIssuerUIDL( *uid );
+ }
+ CleanupStack::Pop( id );
+ delete iData->iBaseCertificateID;
+ iData->iBaseCertificateID = id;
+ delete iData->iSubjectName;
+ iData->iSubjectName = NULL;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::SetSubjectNameL()
+// Setter for subjectName, deletes also baseCertificateID
+// -----------------------------------------------------------------------------
+EXPORT_C void CCMSX509AttributeCertificateInfo::SetSubjectNameL(
+ const CCMSX509GeneralNames& aSubjectName )
+ {
+ CCMSX509GeneralNames* subjectName =
+ CCMSX509GeneralNames::NewL( aSubjectName );
+ delete iData->iSubjectName;
+ iData->iSubjectName = subjectName;
+ delete iData->iBaseCertificateID;
+ iData->iBaseCertificateID = NULL;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::SetIssuerL()
+// Setter for Issuer
+// -----------------------------------------------------------------------------
+EXPORT_C void CCMSX509AttributeCertificateInfo::SetIssuerL(
+ const CCMSX509GeneralNames& aIssuer )
+ {
+ CCMSX509GeneralNames* issuer = CCMSX509GeneralNames::NewL( aIssuer );
+ delete iData->iIssuer;
+ iData->iIssuer = issuer;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::SetSignatureL()
+// Setter for Signature
+// -----------------------------------------------------------------------------
+EXPORT_C void CCMSX509AttributeCertificateInfo::SetSignatureL(
+ const CCMSX509AlgorithmIdentifier& aSignature )
+ {
+ CCMSX509AlgorithmIdentifier* signature =
+ CCMSX509AlgorithmIdentifier::NewL( aSignature.AlgorithmIdentifier() );
+ CleanupStack::PushL( signature );
+ const CAlgorithmIdentifier* digestIdentifier =
+ aSignature.DigestAlgorithm();
+ if( digestIdentifier )
+ {
+ signature->SetDigestAlgorithmL( digestIdentifier );
+ }
+ CleanupStack::Pop( signature );
+ delete iData->iSignature;
+ iData->iSignature = signature;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::SetSerialNumber()
+// Setter for serialNumber
+// -----------------------------------------------------------------------------
+EXPORT_C void CCMSX509AttributeCertificateInfo::SetSerialNumber(
+ const TInt aSerialNumber )
+ {
+ iData->iSerialNumber = aSerialNumber;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::SetNotBeforeTimeL()
+// Setter for notBeforeTime
+// -----------------------------------------------------------------------------
+EXPORT_C void CCMSX509AttributeCertificateInfo::SetNotBeforeTimeL(
+ const TTime& aNotBeforeTime )
+ {
+ iData->iNotBeforeTime = aNotBeforeTime;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::SetNotAfterTimeL()
+// Setter for notAfterTime
+// -----------------------------------------------------------------------------
+EXPORT_C void CCMSX509AttributeCertificateInfo::SetNotAfterTimeL(
+ const TTime& aNotAfterTime )
+ {
+ iData->iNotAfterTime = aNotAfterTime;
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::SetAttributesL()
+// Setter for attributes
+// -----------------------------------------------------------------------------
+EXPORT_C void CCMSX509AttributeCertificateInfo::SetAttributesL(
+ const CArrayPtr< CCMSAttribute >& aAttributes )
+ {
+ TInt attributeCount = aAttributes.Count();
+ CArrayPtr< CCMSAttribute >* attributes = NULL;
+ if( attributeCount > 0 )
+ {
+ attributes =
+ new( ELeave ) CArrayPtrFlat< CCMSAttribute >( attributeCount );
+ CleanupStack::PushL( attributes );
+ for( TInt i = 0; i < attributeCount; i++ )
+ {
+ const CCMSAttribute* origAttribute = aAttributes[ i ];
+ CCMSAttribute* attribute =
+ CCMSAttribute::NewLC( origAttribute->AttributeType(),
+ origAttribute->AttributeValues() );
+ attributes->AppendL( attribute );
+ }
+
+ CleanupStack::Pop( attributeCount ); // all attributes
+ CleanupStack::Pop( attributes );
+ }
+ else
+ {
+ attributes =
+ new( ELeave ) CArrayPtrFlat< CCMSAttribute >( KDefaultGranularity );
+ }
+
+
+ if( iData->iAttributes )
+ {
+ iData->iAttributes->ResetAndDestroy();
+ delete iData->iAttributes;
+ }
+ iData->iAttributes = attributes;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CCMSX509AttributeCertificateInfo::SetIssuerUniqueIDL()
+// Setter for issuerUniqueID
+// -----------------------------------------------------------------------------
+EXPORT_C void CCMSX509AttributeCertificateInfo::SetIssuerUniqueIDL(
+ const TDesC8& aIssuerUniqueID )
+ {
+ HBufC8* uniqueId = aIssuerUniqueID.AllocL();
+ delete iData->iIssuerUniqueID;
+ iData->iIssuerUniqueID = uniqueId;
+ }
+
+// End of File