First public contribution.
2 * Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
4 * This component and the accompanying materials are made available
5 * under the terms of the License "Eclipse Public License v1.0"
6 * which accompanies this distribution, and is available
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
9 * Initial Contributors:
10 * Nokia Corporation - initial contribution.
19 #include <cmssigneridentifier.h>
24 // Implementation of CCmsSignerIdentifier
27 CCmsSignerIdentifier* CCmsSignerIdentifier::NewL(CPKCS7IssuerAndSerialNumber* aIssuerAndSerialNumber)
29 CCmsSignerIdentifier* self = NewLC(aIssuerAndSerialNumber);
30 CleanupStack::Pop(self);
34 CCmsSignerIdentifier* CCmsSignerIdentifier::NewLC(CPKCS7IssuerAndSerialNumber* aIssuerAndSerialNumber)
36 if (!aIssuerAndSerialNumber)
38 User::Leave(KErrArgument);
40 CCmsSignerIdentifier* self = new (ELeave) CCmsSignerIdentifier(aIssuerAndSerialNumber);
41 CleanupStack::PushL(self);
45 CCmsSignerIdentifier* CCmsSignerIdentifier::NewL(HBufC8* aSubjectKeyIdExt)
47 CCmsSignerIdentifier* self = NewLC(aSubjectKeyIdExt);
48 CleanupStack::Pop(self);
52 CCmsSignerIdentifier* CCmsSignerIdentifier::NewLC(HBufC8* aSubjectKeyIdExt)
54 if (!aSubjectKeyIdExt)
56 User::Leave(KErrArgument);
58 CCmsSignerIdentifier* self = new (ELeave) CCmsSignerIdentifier(aSubjectKeyIdExt);
59 CleanupStack::PushL(self);
63 CCmsSignerIdentifier* CCmsSignerIdentifier::NewL(const TDesC8& aRawData)
65 CCmsSignerIdentifier* self = NewLC(aRawData);
66 CleanupStack::Pop(self);
70 CCmsSignerIdentifier* CCmsSignerIdentifier::NewLC(const TDesC8& aRawData)
72 CCmsSignerIdentifier* self = new (ELeave) CCmsSignerIdentifier();
73 CleanupStack::PushL(self);
74 self->ConstructL(aRawData);
78 CCmsSignerIdentifier::CCmsSignerIdentifier(CPKCS7IssuerAndSerialNumber* aIssuerAndSerialNumber) : iSignerIdentifierType(EIssuerAndSerialNumber)
80 iIssuerAndSerialNumber=aIssuerAndSerialNumber;
83 CCmsSignerIdentifier::CCmsSignerIdentifier(HBufC8* aSubjectKeyIdExt) : iSignerIdentifierType(ESubjectKeyIdentifier)
85 iSubjectKeyIdExt=aSubjectKeyIdExt;
88 EXPORT_C CCmsSignerIdentifier::~CCmsSignerIdentifier()
90 delete iIssuerAndSerialNumber;
91 delete iSubjectKeyIdExt;
94 CASN1EncBase* CCmsSignerIdentifier::EncodeASN1DERLC() const
96 switch (iSignerIdentifierType)
98 case EIssuerAndSerialNumber:
100 return iIssuerAndSerialNumber->EncodeASN1DERLC();
103 case ESubjectKeyIdentifier:
105 CASN1EncBase* subKey = CASN1EncOctetString::NewLC(*iSubjectKeyIdExt);
111 User::Leave(KErrNotSupported);
114 //Should not arrive here
118 EXPORT_C const CPKCS7IssuerAndSerialNumber* CCmsSignerIdentifier::IssuerAndSerialNumber() const
120 return iIssuerAndSerialNumber;
123 EXPORT_C TInt CCmsSignerIdentifier::SignerIdentifierType() const
125 return iSignerIdentifierType;
128 CCmsSignerIdentifier::CCmsSignerIdentifier()
132 void CCmsSignerIdentifier::ConstructL(const TDesC8& aRawData)
134 TASN1DecGeneric decGen(aRawData);
137 if(decGen.Tag() == EASN1Sequence && decGen.Class()==EUniversal)
139 iSignerIdentifierType=EIssuerAndSerialNumber;
140 iIssuerAndSerialNumber=CPKCS7IssuerAndSerialNumber::NewL(aRawData);
142 else if(decGen.Tag() == 0 && decGen.Class()==EContextSpecific)
144 iSignerIdentifierType=ESubjectKeyIdentifier;
145 iSubjectKeyIdExt=decGen.GetContentDER().AllocL();
149 User::Leave(KErrArgument);
153 EXPORT_C const TDesC8& CCmsSignerIdentifier::SubjectKeyIdentifier() const
155 return *iSubjectKeyIdExt;