First public contribution.
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.
22 #include <asymmetric.h>
23 #include "tvectorutils.h"
24 #include "trsaparams.h"
26 _LIT8(KModStart, "<modulus>");
27 _LIT8(KModEnd, "</modulus>");
28 _LIT8(KPubExpStart, "<publicExponent>");
29 _LIT8(KPubExpEnd, "</publicExponent>");
30 _LIT8(KPrivExpStart, "<privateExponent>");
31 _LIT8(KPrivExpEnd, "</privateExponent>");
32 _LIT8(KPStart, "<P>");
34 _LIT8(KQStart, "<Q>");
36 _LIT8(KdPStart, "<dP>");
37 _LIT8(KdPEnd, "</dP>");
38 _LIT8(KdQStart, "<dQ>");
39 _LIT8(KdQEnd, "</dQ>");
40 _LIT8(KqInvStart, "<qInv>");
41 _LIT8(KqInvEnd, "</qInv>");
42 _LIT8(KReturnCodeStart, "<return>");
43 _LIT8(KReturnCodeEnd, "</return>");
44 _LIT8(KErrArgumentString, "KErrArgument");
46 CTestAction* CRSATestPublicKey::NewL(RFs& aFs, CConsoleBase& aConsole, Output& aOut,
47 const TTestActionSpec& aTestActionSpec)
49 CTestAction* self = CRSATestPublicKey::NewLC(aFs, aConsole,
50 aOut, aTestActionSpec);
55 CTestAction* CRSATestPublicKey::NewLC(RFs& aFs, CConsoleBase& aConsole, Output& aOut,
56 const TTestActionSpec& aTestActionSpec)
58 CRSATestPublicKey* self = new(ELeave) CRSATestPublicKey(aFs, aConsole, aOut);
59 CleanupStack::PushL(self);
60 self->ConstructL(aTestActionSpec);
64 CRSATestPublicKey::~CRSATestPublicKey()
69 CRSATestPublicKey::CRSATestPublicKey(RFs& aFs, CConsoleBase& aConsole, Output& aOut)
70 : CTestAction(aConsole, aOut), iFs(aFs)
74 void CRSATestPublicKey::ConstructL(const TTestActionSpec& aTestActionSpec)
76 CTestAction::ConstructL(aTestActionSpec);
77 iBody = HBufC8::NewL(aTestActionSpec.iActionBody.Length());
78 iBody->Des().Copy(aTestActionSpec.iActionBody);
80 iExpectedReturnValue = KErrNone;
81 TPtrC8 returnValue = Input::ParseElement(aTestActionSpec.iActionResult, KReturnCodeStart, KReturnCodeEnd);
82 if(returnValue.Compare(KErrArgumentString) == 0)
84 iExpectedReturnValue = KErrArgument;
89 void CRSATestPublicKey::DoPerformPrerequisite(TRequestStatus& aStatus)
91 TRequestStatus* status = &aStatus;
92 User::RequestComplete(status, KErrNone);
93 iActionState = CTestAction::EAction;
96 void CRSATestPublicKey::DoPerformPostrequisite(TRequestStatus& aStatus)
98 TRequestStatus* status = &aStatus;
101 User::RequestComplete(status, KErrNone);
104 void CRSATestPublicKey::DoReportAction(void)
108 void CRSATestPublicKey::DoCheckResult(TInt)
111 iConsole.Printf(_L("."));
113 iConsole.Printf(_L("X"));
116 void CRSATestPublicKey::PerformAction(TRequestStatus& aStatus)
119 TRequestStatus* status = &aStatus;
122 TPtrC8 modIn = Input::ParseElement(*iBody, KModStart, KModEnd);
123 RInteger mod = VectorUtils::ParseIntegerL(modIn);
124 CleanupStack::PushL(mod);
126 TPtrC8 expIn = Input::ParseElement(*iBody, KPubExpStart, KPubExpEnd);
127 RInteger exp = VectorUtils::ParseIntegerL(expIn);
128 CleanupStack::PushL(exp);
131 CRSAPublicKey* key = NULL;
132 TRAPD(err, key = CRSAPublicKey::NewL(mod, exp));
133 if(err == iExpectedReturnValue)
139 iOut.writeString(_L("CRSAPublicKey construction did not return expected result\n"));
143 CleanupStack::PopAndDestroy(2);
147 CleanupStack::PushL(key);
148 CleanupStack::PopAndDestroy(3);
151 User::RequestComplete(status, KErrNone);
152 iActionState = CTestAction::EPostrequisite;
157 CTestAction* CRSATestPrivateKey::NewL(RFs& aFs, CConsoleBase& aConsole, Output& aOut,
158 const TTestActionSpec& aTestActionSpec)
160 CTestAction* self = CRSATestPrivateKey::NewLC(aFs, aConsole,
161 aOut, aTestActionSpec);
166 CTestAction* CRSATestPrivateKey::NewLC(RFs& aFs, CConsoleBase& aConsole, Output& aOut,
167 const TTestActionSpec& aTestActionSpec)
169 CRSATestPrivateKey* self = new(ELeave) CRSATestPrivateKey(aFs, aConsole, aOut);
170 CleanupStack::PushL(self);
171 self->ConstructL(aTestActionSpec);
175 CRSATestPrivateKey::~CRSATestPrivateKey()
180 CRSATestPrivateKey::CRSATestPrivateKey(RFs& aFs, CConsoleBase& aConsole, Output& aOut)
181 : CTestAction(aConsole, aOut), iFs(aFs)
185 void CRSATestPrivateKey::ConstructL(const TTestActionSpec& aTestActionSpec)
187 CTestAction::ConstructL(aTestActionSpec);
188 iBody = HBufC8::NewL(aTestActionSpec.iActionBody.Length());
189 iBody->Des().Copy(aTestActionSpec.iActionBody);
191 iExpectedReturnValue = KErrNone;
192 TPtrC8 returnValue = Input::ParseElement(aTestActionSpec.iActionResult, KReturnCodeStart, KReturnCodeEnd);
193 if(returnValue.Compare(KErrArgumentString) == 0)
195 iExpectedReturnValue = KErrArgument;
200 void CRSATestPrivateKey::DoPerformPrerequisite(TRequestStatus& aStatus)
202 TRequestStatus* status = &aStatus;
203 User::RequestComplete(status, KErrNone);
204 iActionState = CTestAction::EAction;
207 void CRSATestPrivateKey::DoPerformPostrequisite(TRequestStatus& aStatus)
209 TRequestStatus* status = &aStatus;
212 User::RequestComplete(status, KErrNone);
215 void CRSATestPrivateKey::DoReportAction(void)
219 void CRSATestPrivateKey::DoCheckResult(TInt)
222 iConsole.Printf(_L("."));
224 iConsole.Printf(_L("X"));
227 void CRSATestPrivateKey::PerformAction(TRequestStatus& aStatus)
230 TRequestStatus* status = &aStatus;
233 TPtrC8 modIn = Input::ParseElement(*iBody, KModStart, KModEnd);
234 RInteger mod = VectorUtils::ParseIntegerL(modIn);
235 CleanupStack::PushL(mod);
237 TPtrC8 expIn = Input::ParseElement(*iBody, KPrivExpStart, KPrivExpEnd);
238 RInteger exp = VectorUtils::ParseIntegerL(expIn);
239 CleanupStack::PushL(exp);
242 CRSAPrivateKeyStandard* key = NULL;
243 TRAPD(err, key = CRSAPrivateKeyStandard::NewL(mod, exp));
244 if(err == iExpectedReturnValue)
250 iOut.writeString(_L("CRSAPrivateKey construction did not return expected result\n"));
254 CleanupStack::PopAndDestroy(2);
258 CleanupStack::PushL(key);
259 CleanupStack::PopAndDestroy(3);
262 User::RequestComplete(status, KErrNone);
263 iActionState = CTestAction::EPostrequisite;
267 CTestAction* CRSATestPrivateKeyCRT::NewL(RFs& aFs, CConsoleBase& aConsole, Output& aOut,
268 const TTestActionSpec& aTestActionSpec)
270 CTestAction* self = CRSATestPrivateKeyCRT::NewLC(aFs, aConsole,
271 aOut, aTestActionSpec);
276 CTestAction* CRSATestPrivateKeyCRT::NewLC(RFs& aFs, CConsoleBase& aConsole, Output& aOut,
277 const TTestActionSpec& aTestActionSpec)
279 CRSATestPrivateKeyCRT* self = new(ELeave) CRSATestPrivateKeyCRT(aFs, aConsole, aOut);
280 CleanupStack::PushL(self);
281 self->ConstructL(aTestActionSpec);
285 CRSATestPrivateKeyCRT::~CRSATestPrivateKeyCRT()
290 CRSATestPrivateKeyCRT::CRSATestPrivateKeyCRT(RFs& aFs, CConsoleBase& aConsole, Output& aOut)
291 : CTestAction(aConsole, aOut), iFs(aFs)
295 void CRSATestPrivateKeyCRT::ConstructL(const TTestActionSpec& aTestActionSpec)
297 CTestAction::ConstructL(aTestActionSpec);
298 iBody = HBufC8::NewL(aTestActionSpec.iActionBody.Length());
299 iBody->Des().Copy(aTestActionSpec.iActionBody);
301 iExpectedReturnValue = KErrNone;
302 TPtrC8 returnValue = Input::ParseElement(aTestActionSpec.iActionResult, KReturnCodeStart, KReturnCodeEnd);
303 if(returnValue.Compare(KErrArgumentString) == 0)
305 iExpectedReturnValue = KErrArgument;
310 void CRSATestPrivateKeyCRT::DoPerformPrerequisite(TRequestStatus& aStatus)
312 TRequestStatus* status = &aStatus;
313 User::RequestComplete(status, KErrNone);
314 iActionState = CTestAction::EAction;
317 void CRSATestPrivateKeyCRT::DoPerformPostrequisite(TRequestStatus& aStatus)
319 TRequestStatus* status = &aStatus;
322 User::RequestComplete(status, KErrNone);
325 void CRSATestPrivateKeyCRT::DoReportAction(void)
329 void CRSATestPrivateKeyCRT::DoCheckResult(TInt)
332 iConsole.Printf(_L("."));
334 iConsole.Printf(_L("X"));
337 void CRSATestPrivateKeyCRT::PerformAction(TRequestStatus& aStatus)
340 TRequestStatus* status = &aStatus;
343 TPtrC8 modIn = Input::ParseElement(*iBody, KModStart, KModEnd);
344 RInteger mod = VectorUtils::ParseIntegerL(modIn);
345 CleanupStack::PushL(mod);
347 TPtrC8 PIn = Input::ParseElement(*iBody, KPStart, KPEnd);
348 RInteger P = VectorUtils::ParseIntegerL(PIn);
349 CleanupStack::PushL(P);
351 TPtrC8 QIn = Input::ParseElement(*iBody, KQStart, KQEnd);
352 RInteger Q = VectorUtils::ParseIntegerL(QIn);
353 CleanupStack::PushL(Q);
355 TPtrC8 dPIn = Input::ParseElement(*iBody, KdPStart, KdPEnd);
356 RInteger dP = VectorUtils::ParseIntegerL(dPIn);
357 CleanupStack::PushL(dP);
359 TPtrC8 dQIn = Input::ParseElement(*iBody, KdQStart, KdQEnd);
360 RInteger dQ = VectorUtils::ParseIntegerL(dQIn);
361 CleanupStack::PushL(dQ);
363 TPtrC8 QInvIn = Input::ParseElement(*iBody, KqInvStart, KqInvEnd);
364 RInteger QInv = VectorUtils::ParseIntegerL(QInvIn);
365 CleanupStack::PushL(QInv);
368 CRSAPrivateKeyCRT* key = NULL;
369 TRAPD(err, key = CRSAPrivateKeyCRT::NewL(mod, P, Q, dP, dQ, QInv));
370 if(err == iExpectedReturnValue)
376 iOut.writeString(_L("CRSAPrivateKeyCRT construction did not return expected result\n"));
380 CleanupStack::PopAndDestroy(6);
384 CleanupStack::PushL(key);
385 CleanupStack::PopAndDestroy(7);
388 User::RequestComplete(status, KErrNone);
389 iActionState = CTestAction::EPostrequisite;