First public contribution.
2 * Copyright (c) 2002-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.
15 * CPKCS10Attributes class implementation.
23 #include <pkcs10attr.h>
26 // CPKCS10AttributeBase /////////////////////////////////////////////////////////
28 CPKCSAttributeBase::CPKCSAttributeBase()
32 CPKCSAttributeBase::~CPKCSAttributeBase()
37 CASN1EncBase* CPKCSAttributeBase::GetEncodingLC()
39 CASN1EncBase* result = iRoot;
42 CleanupStack::PushL(result);
46 // CPKCS10Attribute /////////////////////////////////////////////////////////
48 // This is being deprecated, will be removed
49 EXPORT_C CPKCS10Attribute* CPKCS10Attribute::NewLC(const TDesC& aAttrOID)
51 CPKCS10Attribute* self = new (ELeave) CPKCS10Attribute;
52 CleanupStack::PushL(self);
53 self->ConstructL(aAttrOID, NULL);
57 EXPORT_C CPKCS10Attribute* CPKCS10Attribute::NewLC(const TDesC& aAttrOID, CASN1EncBase* aASN1)
61 User::Leave(KErrArgument);
63 CPKCS10Attribute* self = new (ELeave) CPKCS10Attribute;
64 CleanupStack::PushL(self);
65 self->ConstructL(aAttrOID, aASN1);
69 EXPORT_C CPKCS10Attribute* CPKCS10Attribute::NewL(const TDesC& aAttrOID, CASN1EncBase* aASN1)
71 CPKCS10Attribute* self = NewLC(aAttrOID, aASN1);
72 CleanupStack::Pop(self);
76 EXPORT_C void CPKCS10Attribute::ResetL(const TDesC& aAttrOID, CASN1EncBase* aASN1)
80 User::Leave(KErrArgument);
84 ConstructL(aAttrOID, aASN1);
87 EXPORT_C void CPKCS10Attribute::AddValueL(CASN1EncBase* aASN1)
91 User::Leave(KErrArgument);
93 iValueSet->AddChildL(aASN1);
96 CPKCS10Attribute::CPKCS10Attribute()
100 CPKCS10Attribute::~CPKCS10Attribute()
104 void CPKCS10Attribute::ConstructL(const TDesC& aAttrOID, CASN1EncBase* aASN1)
106 iRoot = CASN1EncSequence::NewL();
107 CASN1EncObjectIdentifier* oid = CASN1EncObjectIdentifier::NewLC(aAttrOID);
108 iRoot->AddAndPopChildL(oid);
109 iValueSet = CASN1EncSet::NewLC();
110 iRoot->AddAndPopChildL(iValueSet); // Takes ownership
112 // For now just to allow for deprecated NewLC() which allows for NULL aASN1
113 // Replace with call to AddValueL() once the quirky NewLC() is removed
116 iValueSet->AddChildL(aASN1);
121 CASN1EncBase* CPKCS10Attribute::TakeEncodingC()
123 return CPKCSAttributeBase::GetEncodingLC();
127 CASN1EncBase* CPKCS10Attribute::TakeEncodingLC()
129 return CPKCSAttributeBase::GetEncodingLC();
132 CASN1EncBase* CPKCS10Attribute::GetEncodingLC()
134 return CPKCSAttributeBase::GetEncodingLC();
138 // CPKCS10Attributes ///////////////////////////////////////////////////////////
140 CPKCS10Attributes::CPKCS10Attributes()
144 EXPORT_C CPKCS10Attributes::~CPKCS10Attributes()
149 EXPORT_C CPKCS10Attributes* CPKCS10Attributes::NewLC()
151 CPKCS10Attributes* self = new (ELeave) CPKCS10Attributes();
152 CleanupStack::PushL(self);
157 EXPORT_C CPKCS10Attributes* CPKCS10Attributes::NewL()
159 CPKCS10Attributes* self = NewLC();
160 CleanupStack::Pop(self);
164 void CPKCS10Attributes::ConstructL()
166 // Create top level ASN1 sequence
167 iRoot = CASN1EncSequence::NewL();
172 EXPORT_C void CPKCS10Attributes::AddAttributeL(CPKCS10Attribute* aAttr)
174 ASSERT(iRoot != NULL);
175 ASSERT(aAttr != NULL);
176 iRoot->AddAndPopChildL(aAttr->TakeEncodingLC());
180 EXPORT_C void CPKCS10Attributes::AddPKCSAttributeL(CPKCSAttributeBase* aAttr)
182 ASSERT(iRoot != NULL);
185 User::Leave(KErrArgument);
187 iRoot->AddAndPopChildL(aAttr->GetEncodingLC());
191 CASN1EncBase* CPKCS10Attributes::TakeEncodingLC()
193 CASN1EncBase* result = iRoot;
195 CleanupStack::PushL(result);