Update contrib.
2 * Copyright (c) 2005-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.
20 #include "x509constraintext.h"
21 #include "x509bitstring.h"
23 // Integer list methods
24 EXPORT_C CX509IntListExt* CX509IntListExt::NewL(const TDesC8& aBinaryData)
26 CX509IntListExt* self = CX509IntListExt::NewLC(aBinaryData);
27 CleanupStack::Pop(self);
31 EXPORT_C CX509IntListExt* CX509IntListExt::NewLC(const TDesC8& aBinaryData)
33 CX509IntListExt* self = new(ELeave) CX509IntListExt;
34 CleanupStack::PushL(self);
37 self->ConstructL(aBinaryData, pos);
41 CX509IntListExt::~CX509IntListExt()
46 EXPORT_C const RArray<TInt>& CX509IntListExt::IntArray() const
51 void CX509IntListExt::ConstructL(const TDesC8& aBinaryData, TInt& aPos)
53 CX509ExtensionBase::ConstructL(aBinaryData, aPos);
56 void CX509IntListExt::DoConstructL(const TDesC8& aBinaryData, TInt& aPos)
58 TASN1DecSequence encSeq;
59 CArrayPtrFlat<TASN1DecGeneric>* seq = encSeq.DecodeDERLC(aBinaryData, aPos);
60 TInt count = seq->Count();
62 TASN1DecInteger encInt;
63 for (TInt i = 0; i < count; i++)
65 TASN1DecGeneric* curr = seq->At(i);
67 if (curr->Tag() == EASN1Integer)
69 User::LeaveIfError(iIntArray.Append(encInt.DecodeDERShortL(*curr)));
73 User::Leave(KErrArgument);
76 CleanupStack::PopAndDestroy(seq);
79 //CX509IntListExt::CX509IntListExt()
83 // UTF-8 String list methods
84 EXPORT_C CX509Utf8StringListExt* CX509Utf8StringListExt::NewL(const TDesC8& aBinaryData)
86 CX509Utf8StringListExt* self = CX509Utf8StringListExt::NewLC(aBinaryData);
87 CleanupStack::Pop(self);
91 EXPORT_C CX509Utf8StringListExt* CX509Utf8StringListExt::NewLC(const TDesC8& aBinaryData)
93 CX509Utf8StringListExt* self = new(ELeave) CX509Utf8StringListExt;
94 CleanupStack::PushL(self);
97 self->ConstructL(aBinaryData, pos);
101 EXPORT_C const RPointerArray<HBufC>& CX509Utf8StringListExt::StringArray() const
106 void CX509Utf8StringListExt::ConstructL(const TDesC8& aBinaryData, TInt& aPos)
108 CX509ExtensionBase::ConstructL(aBinaryData, aPos);
111 void CX509Utf8StringListExt::DoConstructL(const TDesC8& aBinaryData, TInt& aPos)
113 TASN1DecSequence encSeq;
114 CArrayPtrFlat<TASN1DecGeneric>* seq = encSeq.DecodeDERLC(aBinaryData, aPos);
115 TInt count = seq->Count();
117 TASN1DecUTF8String encStr;
118 for (TInt i = 0; i < count; i++)
120 TASN1DecGeneric* curr = seq->At(i);
121 if (curr->Tag() == EASN1UTF8String)
123 HBufC *str = encStr.DecodeDERL(*curr);
124 CleanupStack::PushL(str);
125 User::LeaveIfError(iStringArray.Append(str));
126 CleanupStack::Pop(str);
130 User::Leave(KErrArgument);
133 CleanupStack::PopAndDestroy(seq);
136 CX509Utf8StringListExt::~CX509Utf8StringListExt()
138 iStringArray.ResetAndDestroy();
141 // Capability set methods
142 EXPORT_C CX509CapabilitySetExt* CX509CapabilitySetExt::NewL(const TDesC8& aBinaryData)
144 CX509CapabilitySetExt* self = CX509CapabilitySetExt::NewLC(aBinaryData);
145 CleanupStack::Pop(self);
149 EXPORT_C CX509CapabilitySetExt* CX509CapabilitySetExt::NewLC(const TDesC8& aBinaryData)
151 CX509CapabilitySetExt* self = new (ELeave) CX509CapabilitySetExt;
152 CleanupStack::PushL(self);
155 self->ConstructL(aBinaryData, pos);
159 CX509CapabilitySetExt::~CX509CapabilitySetExt()
163 EXPORT_C const TCapabilitySet& CX509CapabilitySetExt::CapabilitySet() const
165 return iCapabilitySet;
168 void CX509CapabilitySetExt::ConstructL(const TDesC8& aBinaryData, TInt& aPos)
170 CX509ExtensionBase::ConstructL(aBinaryData, aPos);
173 void CX509CapabilitySetExt::DoConstructL(const TDesC8& aBinaryData, TInt& aPos)
175 TASN1DecBitString encBit;
177 // Decode the padding bits
178 HBufC8* bitBuffer = encBit.ExtractOctetStringL(aBinaryData, aPos);
179 CleanupStack::PushL(bitBuffer);
181 // Create bitString for easy access of individual bits.
182 // This transfers ownership of bitBuffer
183 CX509BitString* bitString = new (ELeave) CX509BitString(bitBuffer, bitBuffer->Length() * 8);
184 CleanupStack::Pop(bitBuffer);
186 // Start off with an empty capability set and attempt to add each capability in turn
187 // making sure we don't go past the limit of the supported capabilities.
188 iCapabilitySet.SetEmpty();
189 for (TInt i = 0; i < ECapability_Limit; i++)
191 if (bitString->IsSet(i))
193 iCapabilitySet.AddCapability(static_cast<TCapability>(i));