diff -r 675a964f4eb5 -r 35751d3474b7 cryptomgmtlibs/cryptotokenfw/source/ctframework/Cctcertinfo.cpp --- a/cryptomgmtlibs/cryptotokenfw/source/ctframework/Cctcertinfo.cpp Tue Jul 21 01:04:32 2009 +0100 +++ b/cryptomgmtlibs/cryptotokenfw/source/ctframework/Cctcertinfo.cpp Thu Sep 10 14:01:51 2009 +0300 @@ -1,392 +1,404 @@ -/* -* Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the License "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 "cctcertinfo.h" - -// MCertInfo /////////////////////////////////////////////////////////////////// - -EXPORT_C MCertInfo::MCertInfo() : - iDeletable(ETrue) - { - } - -EXPORT_C MCertInfo::MCertInfo(const TDesC& aLabel, - TCertificateFormat aFormat, - TCertificateOwnerType aCertificateOwnerType, - TInt aSize, - const TKeyIdentifier* aSubjectKeyId, - const TKeyIdentifier* aIssuerKeyId, - TInt aCertificateId, - TBool aDeletable) : - iLabel(aLabel), iCertificateId(aCertificateId), - iFormat(aFormat), iCertificateOwnerType(aCertificateOwnerType), - iSize(aSize), iDeletable(aDeletable) - { - if (aSubjectKeyId) - { - iSubjectKeyId = *aSubjectKeyId; - } - else - { - iSubjectKeyId = KNullDesC8; - } - if (aIssuerKeyId) - { - iIssuerKeyId = *aIssuerKeyId; - } - else - { - iIssuerKeyId = KNullDesC8; - } - } - -EXPORT_C MCertInfo::MCertInfo(const MCertInfo& aOther) : - iLabel(aOther.iLabel), - iCertificateId(aOther.iCertificateId), - iFormat(aOther.iFormat), - iCertificateOwnerType(aOther.iCertificateOwnerType), - iSize(aOther.iSize), - iSubjectKeyId(aOther.iSubjectKeyId), - iIssuerKeyId(aOther.iIssuerKeyId), - iDeletable(aOther.iDeletable) - { - } - -EXPORT_C MCertInfo::~MCertInfo() - { - delete iIssuerHash; - } - -const TDesC8* MCertInfo::IssuerHash() const - { - return iIssuerHash; - } - -EXPORT_C void MCertInfo::ConstructL(const TDesC8* aIssuerHash) - { - delete iIssuerHash; - iIssuerHash = NULL; - if (aIssuerHash) - { - iIssuerHash = aIssuerHash->AllocL(); - } - - if (!Valid()) - { - User::Leave(KErrArgument); - } - } - -TBool MCertInfo::Valid() const - { - if (iLabel.Length() == 0) - { - return EFalse; - } - - if (iCertificateId < 0) - { - return EFalse; - } - - if (iFormat != EX509Certificate && iFormat != EWTLSCertificate && - iFormat != EX968Certificate && iFormat != EX509CertificateUrl && - iFormat != EWTLSCertificateUrl && iFormat != EX968CertificateUrl) - { - return EFalse; - } - - if (iCertificateOwnerType != ECACertificate && - iCertificateOwnerType != EUserCertificate && - iCertificateOwnerType != EPeerCertificate) - { - return EFalse; - } - - if (iSize <= 0) - { - return EFalse; - } - - if (iIssuerHash && *iIssuerHash == KNullDesC8) - { - return EFalse; - } - - return ETrue; - } - -/** - EXPORT_C void MCertInfo::ExternalizeL(RWriteStream& aStream) const - - This method externalizes the MCertInfo object to the given stream. - The iDeletable boolean attribute is combined with the iFormat attribute - for certstore backward compatibility -*/ -EXPORT_C void MCertInfo::ExternalizeL(RWriteStream& aStream) const - { - // insert iDeletable flag as most significant digit of iFormat in order - // store the flag without changing the externalized record format - // The value is OPPOSITE for backward compatibility - TUint8 tmpValue = static_cast (iFormat | (iDeletable ? 0 : KReadOnlyFlagMask)); - - aStream.WriteUint8L(tmpValue); - aStream.WriteInt32L(iSize); - aStream << iLabel; - aStream.WriteInt32L(iCertificateId); - aStream.WriteUint8L(iCertificateOwnerType); - aStream << iSubjectKeyId; - aStream << iIssuerKeyId; - } - -/** - EXPORT_C void MCertInfo::InternalizeL(RReadStream& aStream) - - This method internalizes a MCertInfo object from the given stream. - The iDeletable boolean and iFormat attributes are both extracted - from the stored iFormat value using for certstore backward compatibility -*/ -EXPORT_C void MCertInfo::InternalizeL(RReadStream& aStream) - { - // get first byte from stream containing iDeletable flag and iFormat value - TUint8 tmpValue = aStream.ReadUint8L(); - - // extract iDeletable flag from most significant digit of iFormat - // set iDeletable to the OPPOSITE of the 8th bit value - iDeletable = !(tmpValue & KReadOnlyFlagMask); - - // extract iFormat = the value of the 7 least significant bits - iFormat = static_cast (tmpValue & KFormatMask); - - iSize = aStream.ReadInt32L(); - aStream >> iLabel; - iCertificateId = aStream.ReadInt32L(); - iCertificateOwnerType = static_cast(aStream.ReadUint8L()); - aStream >> iSubjectKeyId; - aStream >> iIssuerKeyId; - - if (!Valid()) - { - User::Leave(KErrCorrupt); - } - } - -// CCTCertInfo ///////////////////////////////////////////////////////////////// - -EXPORT_C CCTCertInfo* CCTCertInfo::NewL(RReadStream& aStream, MCTToken& aToken) - { - CCTCertInfo* self = CCTCertInfo::NewLC(aStream, aToken); - CleanupStack::Pop(self); - return self; - } - -EXPORT_C CCTCertInfo* CCTCertInfo::NewLC(RReadStream& aStream, MCTToken& aToken) - { - CCTCertInfo* self = new(ELeave) CCTCertInfo(aToken); - CleanupReleasePushL(*self); - self->ConstructL(aStream); - return self; - } - -EXPORT_C CCTCertInfo* CCTCertInfo::NewL(const TDesC& aLabel, - TCertificateFormat aFormat, - TCertificateOwnerType aCertificateOwnerType, - TInt aSize, - const TKeyIdentifier* aSubjectKeyId, - const TKeyIdentifier* aIssuerKeyId, - MCTToken& aToken, - TInt aCertificateId) - { - CCTCertInfo* self = CCTCertInfo::NewLC(aLabel, - aFormat, aCertificateOwnerType, aSize, aSubjectKeyId, aIssuerKeyId, aToken, - aCertificateId, ETrue); - CleanupStack::Pop(self); - return self; - } - -EXPORT_C CCTCertInfo* CCTCertInfo::NewL(const TDesC& aLabel, - TCertificateFormat aFormat, - TCertificateOwnerType aCertificateOwnerType, - TInt aSize, - const TKeyIdentifier* aSubjectKeyId, - const TKeyIdentifier* aIssuerKeyId, - MCTToken& aToken, - TInt aCertificateId, - TBool aIsDeletable, - const TDesC8* aIssuerHash) - { - CCTCertInfo* self = CCTCertInfo::NewLC(aLabel, - aFormat, aCertificateOwnerType, aSize, aSubjectKeyId, aIssuerKeyId, aToken, - aCertificateId, aIsDeletable, aIssuerHash); - CleanupStack::Pop(self); - return self; - } - -EXPORT_C CCTCertInfo* CCTCertInfo::NewLC(const TDesC& aLabel, - TCertificateFormat aFormat, - TCertificateOwnerType aCertificateOwnerType, - TInt aSize, - const TKeyIdentifier* aSubjectKeyId, - const TKeyIdentifier* aIssuerKeyId, - MCTToken& aToken, - TInt aCertificateId) - { - return CCTCertInfo::NewLC(aLabel, - aFormat, aCertificateOwnerType, aSize, aSubjectKeyId, aIssuerKeyId, - aToken, aCertificateId, ETrue); - } - -EXPORT_C CCTCertInfo* CCTCertInfo::NewLC(const TDesC& aLabel, - TCertificateFormat aFormat, - TCertificateOwnerType aCertificateOwnerType, - TInt aSize, - const TKeyIdentifier* aSubjectKeyId, - const TKeyIdentifier* aIssuerKeyId, - MCTToken& aToken, - TInt aCertificateId, - TBool aIsDeletable, - const TDesC8* aIssuerHash) - { - CCTCertInfo* self = new(ELeave) CCTCertInfo(aLabel, - aFormat, aCertificateOwnerType, aSize, aSubjectKeyId, - aIssuerKeyId, aToken, aCertificateId, aIsDeletable); - CleanupReleasePushL(*self); - self->ConstructL(aIssuerHash); - return self; - } - -EXPORT_C CCTCertInfo* CCTCertInfo::NewL(const CCTCertInfo& aCertInfo) - { - CCTCertInfo* self = CCTCertInfo::NewLC(aCertInfo); - CleanupStack::Pop(self); - return self; - } - -EXPORT_C CCTCertInfo* CCTCertInfo::NewLC(const CCTCertInfo& aCertInfo) - { - CCTCertInfo* self = new(ELeave) CCTCertInfo(aCertInfo); - CleanupReleasePushL(*self); - self->ConstructL(aCertInfo.IssuerHash()); - return self; - } - -CCTCertInfo::CCTCertInfo(MCTToken& aToken) - : MCTTokenObject(aToken), iToken(aToken) - { - } - -CCTCertInfo::CCTCertInfo(const TDesC& aLabel, - TCertificateFormat aFormat, - TCertificateOwnerType aCertificateOwnerType, - TInt aSize, - const TKeyIdentifier* aSubjectKeyId, - const TKeyIdentifier* aIssuerKeyId, - MCTToken& aToken, - TInt aCertificateId, - TBool aIsDeletable) - : MCTTokenObject(aToken), - MCertInfo(aLabel, aFormat, aCertificateOwnerType, aSize, aSubjectKeyId, - aIssuerKeyId, aCertificateId, aIsDeletable), - iToken(aToken) - { - } - -CCTCertInfo::CCTCertInfo(const CCTCertInfo& aOther) - : MCTTokenObject(aOther.iToken), MCertInfo(aOther), iToken(aOther.iToken) - { - } - -void CCTCertInfo::ConstructL(RReadStream& aStream) - { - InternalizeL(aStream); - } - -void CCTCertInfo::ConstructL(const TDesC8* aIssuerHash) - { - MCertInfo::ConstructL(aIssuerHash); - } - -EXPORT_C CCTCertInfo::~CCTCertInfo() - { - } - -const TDesC& CCTCertInfo::Label() const - { - return iLabel; - } - -TUid CCTCertInfo::Type() const - { - TUid uid = { KCTObjectCertInfo }; - return uid; - } - -EXPORT_C const TKeyIdentifier& CCTCertInfo::SubjectKeyId() const - { - return iSubjectKeyId; - } - -EXPORT_C const TKeyIdentifier& CCTCertInfo::IssuerKeyId() const - { - return iIssuerKeyId; - } - -EXPORT_C TCertificateFormat CCTCertInfo::CertificateFormat() const - { - return iFormat; - } - -EXPORT_C TCertificateOwnerType CCTCertInfo::CertificateOwnerType() const - { - return iCertificateOwnerType; - } - -EXPORT_C TInt CCTCertInfo::Size() const - { - return iSize; - } - -MCTToken& CCTCertInfo::Token() const - { - return iToken; - } - -EXPORT_C TCTTokenObjectHandle CCTCertInfo::Handle() const - { - return TCTTokenObjectHandle(iToken.Handle(), iCertificateId); - } - -EXPORT_C TBool CCTCertInfo::IsDeletable() const - { - return iDeletable; - } - -EXPORT_C const TDesC8* CCTCertInfo::IssuerHash() const - { - return MCertInfo::IssuerHash(); - } - -EXPORT_C TBool CCTCertInfo::operator==(const CCTCertInfo& aCertInfo) const - { - return aCertInfo.iLabel == iLabel; - } - -EXPORT_C void CCTCertInfo::SetCertificateId(TInt aCertId) -{ - iCertificateId = aCertId; -} +/* +* Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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 "cctcertinfo.h" + +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS + +/** Mask constants used for serializing iDeletable and iFormat attributes +*/ +const TUint KReadOnlyFlagMask = 128; +const TUint KFormatMask = 127; + +/** The UID of a CertInfo MCTTokenObject. */ +const TInt KCTObjectCertInfo = 0x101F50E6; + +#endif + +// MCertInfo /////////////////////////////////////////////////////////////////// + +EXPORT_C MCertInfo::MCertInfo() : + iDeletable(ETrue) + { + } + +EXPORT_C MCertInfo::MCertInfo(const TDesC& aLabel, + TCertificateFormat aFormat, + TCertificateOwnerType aCertificateOwnerType, + TInt aSize, + const TKeyIdentifier* aSubjectKeyId, + const TKeyIdentifier* aIssuerKeyId, + TInt aCertificateId, + TBool aDeletable) : + iLabel(aLabel), iCertificateId(aCertificateId), + iFormat(aFormat), iCertificateOwnerType(aCertificateOwnerType), + iSize(aSize), iDeletable(aDeletable) + { + if (aSubjectKeyId) + { + iSubjectKeyId = *aSubjectKeyId; + } + else + { + iSubjectKeyId = KNullDesC8; + } + if (aIssuerKeyId) + { + iIssuerKeyId = *aIssuerKeyId; + } + else + { + iIssuerKeyId = KNullDesC8; + } + } + +EXPORT_C MCertInfo::MCertInfo(const MCertInfo& aOther) : + iLabel(aOther.iLabel), + iCertificateId(aOther.iCertificateId), + iFormat(aOther.iFormat), + iCertificateOwnerType(aOther.iCertificateOwnerType), + iSize(aOther.iSize), + iSubjectKeyId(aOther.iSubjectKeyId), + iIssuerKeyId(aOther.iIssuerKeyId), + iDeletable(aOther.iDeletable) + { + } + +EXPORT_C MCertInfo::~MCertInfo() + { + delete iIssuerHash; + } + +const TDesC8* MCertInfo::IssuerHash() const + { + return iIssuerHash; + } + +EXPORT_C void MCertInfo::ConstructL(const TDesC8* aIssuerHash) + { + delete iIssuerHash; + iIssuerHash = NULL; + if (aIssuerHash) + { + iIssuerHash = aIssuerHash->AllocL(); + } + + if (!Valid()) + { + User::Leave(KErrArgument); + } + } + +TBool MCertInfo::Valid() const + { + if (iLabel.Length() == 0) + { + return EFalse; + } + + if (iCertificateId < 0) + { + return EFalse; + } + + if (iFormat != EX509Certificate && iFormat != EWTLSCertificate && + iFormat != EX968Certificate && iFormat != EX509CertificateUrl && + iFormat != EWTLSCertificateUrl && iFormat != EX968CertificateUrl) + { + return EFalse; + } + + if (iCertificateOwnerType != ECACertificate && + iCertificateOwnerType != EUserCertificate && + iCertificateOwnerType != EPeerCertificate) + { + return EFalse; + } + + if (iSize <= 0) + { + return EFalse; + } + + if (iIssuerHash && *iIssuerHash == KNullDesC8) + { + return EFalse; + } + + return ETrue; + } + +/** + EXPORT_C void MCertInfo::ExternalizeL(RWriteStream& aStream) const + + This method externalizes the MCertInfo object to the given stream. + The iDeletable boolean attribute is combined with the iFormat attribute + for certstore backward compatibility +*/ +EXPORT_C void MCertInfo::ExternalizeL(RWriteStream& aStream) const + { + // insert iDeletable flag as most significant digit of iFormat in order + // store the flag without changing the externalized record format + // The value is OPPOSITE for backward compatibility + TUint8 tmpValue = static_cast (iFormat | (iDeletable ? 0 : KReadOnlyFlagMask)); + + aStream.WriteUint8L(tmpValue); + aStream.WriteInt32L(iSize); + aStream << iLabel; + aStream.WriteInt32L(iCertificateId); + aStream.WriteUint8L(iCertificateOwnerType); + aStream << iSubjectKeyId; + aStream << iIssuerKeyId; + } + +/** + EXPORT_C void MCertInfo::InternalizeL(RReadStream& aStream) + + This method internalizes a MCertInfo object from the given stream. + The iDeletable boolean and iFormat attributes are both extracted + from the stored iFormat value using for certstore backward compatibility +*/ +EXPORT_C void MCertInfo::InternalizeL(RReadStream& aStream) + { + // get first byte from stream containing iDeletable flag and iFormat value + TUint8 tmpValue = aStream.ReadUint8L(); + + // extract iDeletable flag from most significant digit of iFormat + // set iDeletable to the OPPOSITE of the 8th bit value + iDeletable = !(tmpValue & KReadOnlyFlagMask); + + // extract iFormat = the value of the 7 least significant bits + iFormat = static_cast (tmpValue & KFormatMask); + + iSize = aStream.ReadInt32L(); + aStream >> iLabel; + iCertificateId = aStream.ReadInt32L(); + iCertificateOwnerType = static_cast(aStream.ReadUint8L()); + aStream >> iSubjectKeyId; + aStream >> iIssuerKeyId; + + if (!Valid()) + { + User::Leave(KErrCorrupt); + } + } + +// CCTCertInfo ///////////////////////////////////////////////////////////////// + +EXPORT_C CCTCertInfo* CCTCertInfo::NewL(RReadStream& aStream, MCTToken& aToken) + { + CCTCertInfo* self = CCTCertInfo::NewLC(aStream, aToken); + CleanupStack::Pop(self); + return self; + } + +EXPORT_C CCTCertInfo* CCTCertInfo::NewLC(RReadStream& aStream, MCTToken& aToken) + { + CCTCertInfo* self = new(ELeave) CCTCertInfo(aToken); + CleanupReleasePushL(*self); + self->ConstructL(aStream); + return self; + } + +EXPORT_C CCTCertInfo* CCTCertInfo::NewL(const TDesC& aLabel, + TCertificateFormat aFormat, + TCertificateOwnerType aCertificateOwnerType, + TInt aSize, + const TKeyIdentifier* aSubjectKeyId, + const TKeyIdentifier* aIssuerKeyId, + MCTToken& aToken, + TInt aCertificateId) + { + CCTCertInfo* self = CCTCertInfo::NewLC(aLabel, + aFormat, aCertificateOwnerType, aSize, aSubjectKeyId, aIssuerKeyId, aToken, + aCertificateId, ETrue); + CleanupStack::Pop(self); + return self; + } + +EXPORT_C CCTCertInfo* CCTCertInfo::NewL(const TDesC& aLabel, + TCertificateFormat aFormat, + TCertificateOwnerType aCertificateOwnerType, + TInt aSize, + const TKeyIdentifier* aSubjectKeyId, + const TKeyIdentifier* aIssuerKeyId, + MCTToken& aToken, + TInt aCertificateId, + TBool aIsDeletable, + const TDesC8* aIssuerHash) + { + CCTCertInfo* self = CCTCertInfo::NewLC(aLabel, + aFormat, aCertificateOwnerType, aSize, aSubjectKeyId, aIssuerKeyId, aToken, + aCertificateId, aIsDeletable, aIssuerHash); + CleanupStack::Pop(self); + return self; + } + +EXPORT_C CCTCertInfo* CCTCertInfo::NewLC(const TDesC& aLabel, + TCertificateFormat aFormat, + TCertificateOwnerType aCertificateOwnerType, + TInt aSize, + const TKeyIdentifier* aSubjectKeyId, + const TKeyIdentifier* aIssuerKeyId, + MCTToken& aToken, + TInt aCertificateId) + { + return CCTCertInfo::NewLC(aLabel, + aFormat, aCertificateOwnerType, aSize, aSubjectKeyId, aIssuerKeyId, + aToken, aCertificateId, ETrue); + } + +EXPORT_C CCTCertInfo* CCTCertInfo::NewLC(const TDesC& aLabel, + TCertificateFormat aFormat, + TCertificateOwnerType aCertificateOwnerType, + TInt aSize, + const TKeyIdentifier* aSubjectKeyId, + const TKeyIdentifier* aIssuerKeyId, + MCTToken& aToken, + TInt aCertificateId, + TBool aIsDeletable, + const TDesC8* aIssuerHash) + { + CCTCertInfo* self = new(ELeave) CCTCertInfo(aLabel, + aFormat, aCertificateOwnerType, aSize, aSubjectKeyId, + aIssuerKeyId, aToken, aCertificateId, aIsDeletable); + CleanupReleasePushL(*self); + self->ConstructL(aIssuerHash); + return self; + } + +EXPORT_C CCTCertInfo* CCTCertInfo::NewL(const CCTCertInfo& aCertInfo) + { + CCTCertInfo* self = CCTCertInfo::NewLC(aCertInfo); + CleanupStack::Pop(self); + return self; + } + +EXPORT_C CCTCertInfo* CCTCertInfo::NewLC(const CCTCertInfo& aCertInfo) + { + CCTCertInfo* self = new(ELeave) CCTCertInfo(aCertInfo); + CleanupReleasePushL(*self); + self->ConstructL(aCertInfo.IssuerHash()); + return self; + } + +CCTCertInfo::CCTCertInfo(MCTToken& aToken) + : MCTTokenObject(aToken), iToken(aToken) + { + } + +CCTCertInfo::CCTCertInfo(const TDesC& aLabel, + TCertificateFormat aFormat, + TCertificateOwnerType aCertificateOwnerType, + TInt aSize, + const TKeyIdentifier* aSubjectKeyId, + const TKeyIdentifier* aIssuerKeyId, + MCTToken& aToken, + TInt aCertificateId, + TBool aIsDeletable) + : MCTTokenObject(aToken), + MCertInfo(aLabel, aFormat, aCertificateOwnerType, aSize, aSubjectKeyId, + aIssuerKeyId, aCertificateId, aIsDeletable), + iToken(aToken) + { + } + +CCTCertInfo::CCTCertInfo(const CCTCertInfo& aOther) + : MCTTokenObject(aOther.iToken), MCertInfo(aOther), iToken(aOther.iToken) + { + } + +void CCTCertInfo::ConstructL(RReadStream& aStream) + { + InternalizeL(aStream); + } + +void CCTCertInfo::ConstructL(const TDesC8* aIssuerHash) + { + MCertInfo::ConstructL(aIssuerHash); + } + +EXPORT_C CCTCertInfo::~CCTCertInfo() + { + } + +const TDesC& CCTCertInfo::Label() const + { + return iLabel; + } + +TUid CCTCertInfo::Type() const + { + TUid uid = { KCTObjectCertInfo }; + return uid; + } + +EXPORT_C const TKeyIdentifier& CCTCertInfo::SubjectKeyId() const + { + return iSubjectKeyId; + } + +EXPORT_C const TKeyIdentifier& CCTCertInfo::IssuerKeyId() const + { + return iIssuerKeyId; + } + +EXPORT_C TCertificateFormat CCTCertInfo::CertificateFormat() const + { + return iFormat; + } + +EXPORT_C TCertificateOwnerType CCTCertInfo::CertificateOwnerType() const + { + return iCertificateOwnerType; + } + +EXPORT_C TInt CCTCertInfo::Size() const + { + return iSize; + } + +MCTToken& CCTCertInfo::Token() const + { + return iToken; + } + +EXPORT_C TCTTokenObjectHandle CCTCertInfo::Handle() const + { + return TCTTokenObjectHandle(iToken.Handle(), iCertificateId); + } + +EXPORT_C TBool CCTCertInfo::IsDeletable() const + { + return iDeletable; + } + +EXPORT_C const TDesC8* CCTCertInfo::IssuerHash() const + { + return MCertInfo::IssuerHash(); + } + +EXPORT_C TBool CCTCertInfo::operator==(const CCTCertInfo& aCertInfo) const + { + return aCertInfo.iLabel == iLabel; + } + +EXPORT_C void CCTCertInfo::SetCertificateId(TInt aCertId) +{ + iCertificateId = aCertId; +}