Update contrib.
2 * Copyright (c) 1998-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.
24 EXPORT_C CX509DHPublicKey* CX509DHPublicKey::NewL(const TDesC8& aParamsData, const TDesC8& aKeyData)
26 CX509DHPublicKey* me = CX509DHPublicKey::NewLC(aParamsData, aKeyData);
27 CleanupStack::Pop(me);
31 EXPORT_C CX509DHPublicKey* CX509DHPublicKey::NewLC(const TDesC8& aParamsData, const TDesC8& aKeyData)
33 CX509DHPublicKey* me = new (ELeave) CX509DHPublicKey();
34 CleanupStack::PushL(me);
35 me->ConstructL(aParamsData, aKeyData);
39 EXPORT_C CX509DHPublicKey::~CX509DHPublicKey()
43 CX509DHPublicKey::CX509DHPublicKey()
47 void CX509DHPublicKey::ConstructL(const TDesC8& aParamsData, const TDesC8& aKeyData)
49 CX509DHDomainParams* params=CX509DHDomainParams::NewLC(aParamsData);
50 iN = RInteger::NewL(params->P());
51 iG = RInteger::NewL(params->G());
52 iX = RInteger::NewL(aKeyData);
53 CleanupStack::PopAndDestroy(params);
57 //DH validation params
58 EXPORT_C CX509DHValidationParams* CX509DHValidationParams::NewL(const TDesC8& aBinaryData)
61 return CX509DHValidationParams::NewL(aBinaryData, pos);
64 EXPORT_C CX509DHValidationParams* CX509DHValidationParams::NewLC(const TDesC8& aBinaryData)
67 return CX509DHValidationParams::NewLC(aBinaryData, pos);
70 EXPORT_C CX509DHValidationParams* CX509DHValidationParams::NewL(const TDesC8& aBinaryData, TInt& aPos)
72 CX509DHValidationParams* self = CX509DHValidationParams::NewLC(aBinaryData, aPos);
77 EXPORT_C CX509DHValidationParams* CX509DHValidationParams::NewLC(const TDesC8& aBinaryData, TInt& aPos)
79 CX509DHValidationParams* self = new(ELeave) CX509DHValidationParams;
80 CleanupStack::PushL(self);
81 self->ConstructL(aBinaryData, aPos);
85 void CX509DHValidationParams::ConstructL(const TDesC8& aBinaryData, TInt& aPos)
87 TASN1DecGeneric dec(aBinaryData.Right(aBinaryData.Length() - aPos));
89 if (dec.Tag() != EASN1Sequence)
91 User::Leave(KErrArgument);
93 TInt end = aPos + dec.LengthDER();
94 aPos += dec.LengthDERHeader();//add header length to aPos
96 TASN1DecBitString encBS;
97 iSeed = encBS.ExtractOctetStringL(aBinaryData, aPos);
98 TASN1DecInteger encInt;
99 iPGenCounter = encInt.DecodeDERLongL(aBinaryData, aPos);
103 User::Leave(KErrArgument);
107 EXPORT_C const TPtrC8 CX509DHValidationParams::Seed() const
112 EXPORT_C const TInteger& CX509DHValidationParams::PGenCounter() const
117 CX509DHValidationParams::~CX509DHValidationParams()
120 iPGenCounter.Close();
123 CX509DHValidationParams::CX509DHValidationParams()
128 EXPORT_C CX509DHDomainParams* CX509DHDomainParams::NewL(const TDesC8& aBinaryData)
131 return CX509DHDomainParams::NewL(aBinaryData, pos);
134 EXPORT_C CX509DHDomainParams* CX509DHDomainParams::NewLC(const TDesC8& aBinaryData)
137 return CX509DHDomainParams::NewLC(aBinaryData, pos);
140 EXPORT_C CX509DHDomainParams* CX509DHDomainParams::NewL(const TDesC8& aBinaryData, TInt& aPos)
142 CX509DHDomainParams* self = CX509DHDomainParams::NewLC(aBinaryData, aPos);
147 EXPORT_C CX509DHDomainParams* CX509DHDomainParams::NewLC(const TDesC8& aBinaryData, TInt& aPos)
149 CX509DHDomainParams* self = new(ELeave) CX509DHDomainParams;
150 CleanupStack::PushL(self);
151 self->ConstructL(aBinaryData, aPos);
155 void CX509DHDomainParams::ConstructL(const TDesC8& aBinaryData, TInt& aPos)
157 TASN1DecGeneric dec(aBinaryData.Right(aBinaryData.Length() - aPos));
159 if (dec.Tag() != EASN1Sequence)
161 User::Leave(KErrArgument);
163 TInt end = aPos + dec.LengthDER();
164 aPos += dec.LengthDERHeader();//add header length to aPos
166 TASN1DecInteger encInt;
167 iP = encInt.DecodeDERLongL(aBinaryData, aPos);
168 iG = encInt.DecodeDERLongL(aBinaryData, aPos);
171 iQ = encInt.DecodeDERLongL(aBinaryData, aPos);
176 TASN1DecGeneric gen1(aBinaryData.Right(aBinaryData.Length() - aPos));
178 TBool doneVal = EFalse;
179 if (gen1.Tag() == EASN1Integer)
181 iJ = encInt.DecodeDERLongL(aBinaryData, aPos);
185 iValidationParams = CX509DHValidationParams::NewL(aBinaryData, aPos);
188 if ((aPos < end) && (!doneVal))
190 iValidationParams = CX509DHValidationParams::NewL(aBinaryData, aPos);
196 User::Leave(KErrArgument);
200 EXPORT_C const TInteger& CX509DHDomainParams::P() const
205 EXPORT_C const TInteger& CX509DHDomainParams::G() const
210 EXPORT_C const TInteger& CX509DHDomainParams::Q() const
215 EXPORT_C const TInteger& CX509DHDomainParams::J() const
220 EXPORT_C const CX509DHValidationParams* CX509DHDomainParams::ValidationParams() const
222 return iValidationParams;
225 CX509DHDomainParams::~CX509DHDomainParams()
231 delete iValidationParams;
234 CX509DHDomainParams::CX509DHDomainParams()
241 EXPORT_C CX509DHKeyPair* CX509DHKeyPair::NewL(const TDesC8& aParamsData)
243 CX509DHKeyPair* me = CX509DHKeyPair::NewLC(aParamsData);
244 CleanupStack::Pop(me);
248 EXPORT_C CX509DHKeyPair* CX509DHKeyPair::NewLC(const TDesC8& aParamsData)
250 CX509DHKeyPair* me = new (ELeave) CX509DHKeyPair();
251 CleanupStack::PushL(me);
252 me->ConstructL(aParamsData);
256 EXPORT_C CX509DHKeyPair::~CX509DHKeyPair()
259 CX509DHKeyPair::CX509DHKeyPair()
262 void CX509DHKeyPair::ConstructL(const TDesC8& aParamsData)
264 CX509DHDomainParams* params=CX509DHDomainParams::NewLC(aParamsData);
265 RInteger n = RInteger::NewL(params->P());
266 CleanupStack::PushL(n);
267 RInteger g = RInteger::NewL(params->G());
268 CleanupStack::PushL(g);
270 CDHKeyPair::ConstructL(n, g);
271 CleanupStack::Pop(2, &n); // n, g owned by this now
272 CleanupStack::PopAndDestroy(params);