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.
19 #include "trsavector.h"
20 #include "tvectorutils.h"
23 #include "performancetest.h"
24 #include "tbrokenrandom.h"
25 _LIT8(KPlaintextStart, "<plaintext>");
26 _LIT8(KPlaintextEnd, "</plaintext>");
27 _LIT8(KCiphertextStart, "<ciphertext>");
28 _LIT8(KCiphertextEnd, "</ciphertext>");
29 _LIT8(KSignatureStart, "<signature>");
30 _LIT8(KSignatureEnd, "</signature>");
31 _LIT8(KDigestInfoStart, "<digestInfo>");
32 _LIT8(KDigestInfoEnd, "</digestInfo>");
34 ////////////////////////////////////////////////////////////////////////////////
36 ////////////////////////////////////////////////////////////////////////////////
38 CTestAction* CRSAEncryptVector::NewL(RFs& aFs,
39 CConsoleBase& aConsole,
41 const TTestActionSpec& aTestActionSpec)
43 CTestAction* self = CRSAEncryptVector::NewLC(aFs, aConsole,
44 aOut, aTestActionSpec);
49 CTestAction* CRSAEncryptVector::NewLC(RFs& aFs,
50 CConsoleBase& aConsole,
52 const TTestActionSpec& aTestActionSpec)
54 CRSAEncryptVector* self = new(ELeave) CRSAEncryptVector(aFs, aConsole, aOut);
55 CleanupStack::PushL(self);
56 self->ConstructL(aTestActionSpec);
60 CRSAEncryptVector::~CRSAEncryptVector()
67 CRSAEncryptVector::CRSAEncryptVector(RFs& /*aFs*/,
68 CConsoleBase& aConsole,
70 : CVectorTest(aConsole, aOut)
74 void CRSAEncryptVector::ConstructL(const TTestActionSpec& aTestActionSpec)
76 CVectorTest::ConstructL(aTestActionSpec);
78 iPubKey = VectorUtils::ReadRSAPublicKeyL(aTestActionSpec.iActionBody);
80 TPtrC8 ptextIn = Input::ParseElement(aTestActionSpec.iActionBody, KPlaintextStart, KPlaintextEnd);
81 iPlaintext = VectorUtils::ParseBinaryL(ptextIn);
83 TPtrC8 ctextIn = Input::ParseElement(aTestActionSpec.iActionBody, KCiphertextStart, KCiphertextEnd);
84 iCiphertext = VectorUtils::ParseBinaryL(ctextIn);
87 void CRSAEncryptVector::DoPerformanceTestActionL()
91 CRSAPKCS1v15Encryptor* encryptor = CRSAPKCS1v15Encryptor::NewL(*iPubKey);
92 CleanupStack::PushL(encryptor);
94 TTimeIntervalMicroSeconds encryptTime(0);
96 TTimeIntervalSeconds diff(0);
97 const TTimeIntervalSeconds KIterationTime(iPerfTestIterations);
99 TInt noEncryptions = 0;
100 HBufC8 *eResult = HBufC8::NewLC(encryptor->MaxOutputLength());
101 TPtr8 ePtr = eResult->Des();
102 TPtr8* eResultPtr = &ePtr;
105 CRandomIncrementing* brokenRandom = new(ELeave)CRandomIncrementing(1);
106 SetThreadRandomLC(brokenRandom);
107 start.UniversalTime();
108 while (diff < KIterationTime)
111 encryptor->EncryptL(*iPlaintext, *eResultPtr);
114 end.SecondsFrom(start, diff);
117 encryptTime = end.MicroSecondsFrom(start);
118 TReal encrypttime = I64REAL(encryptTime.Int64());
119 CleanupStack::PopAndDestroy(1); //SetThreadRandomLC
122 if (*iCiphertext!=*eResult)
127 CleanupStack::PopAndDestroy(2); // encryptor, eResult
133 TReal rate = I64REAL(encryptTime.Int64()) / noEncryptions;
135 _LIT(KEncryptTime, "\tEncrypt Time: %f us/encryption (%i encryptions in %f us)\r\n");
136 buf.Format(KEncryptTime, rate, noEncryptions, encrypttime);
137 iOut.writeString(buf);
141 _LIT(KNoTimingInfo, "\tTest Failed! No benchmark data\n");
142 iOut.writeString(KNoTimingInfo);
146 void CRSAEncryptVector::DoPerformActionL()
150 CRSAPKCS1v15Encryptor* encryptor = CRSAPKCS1v15Encryptor::NewL(*iPubKey);
151 CleanupStack::PushL(encryptor);
152 HBufC8* encryptBuf = HBufC8::NewLC(encryptor->MaxOutputLength());
153 TPtr8 encryptPtr = encryptBuf->Des();
154 CRandomIncrementing* brokenRandom = new(ELeave)CRandomIncrementing(1);
155 SetThreadRandomLC(brokenRandom);
156 encryptor->EncryptL(*iPlaintext, encryptPtr);
157 CleanupStack::PopAndDestroy(1); //threadrandom;
158 iResult = (*iCiphertext == *encryptBuf);
160 CleanupStack::PopAndDestroy(encryptBuf);
161 CleanupStack::PopAndDestroy(encryptor);
166 ////////////////////////////////////////////////////////////////////////////////
168 ////////////////////////////////////////////////////////////////////////////////
170 CTestAction* CRSADecryptVector::NewL(RFs& aFs,
171 CConsoleBase& aConsole,
173 const TTestActionSpec& aTestActionSpec)
175 CTestAction* self = CRSADecryptVector::NewLC(aFs, aConsole,
176 aOut, aTestActionSpec);
181 CTestAction* CRSADecryptVector::NewLC(RFs& aFs,
182 CConsoleBase& aConsole,
184 const TTestActionSpec& aTestActionSpec)
186 CRSADecryptVector* self = new(ELeave) CRSADecryptVector(aFs, aConsole, aOut);
187 CleanupStack::PushL(self);
188 self->ConstructL(aTestActionSpec);
192 CRSADecryptVector::~CRSADecryptVector()
199 CRSADecryptVector::CRSADecryptVector(RFs& /*aFs*/,
200 CConsoleBase& aConsole,
202 : CVectorTest(aConsole, aOut)
206 void CRSADecryptVector::ConstructL(const TTestActionSpec& aTestActionSpec)
208 CVectorTest::ConstructL(aTestActionSpec);
210 iPrivKey = VectorUtils::ReadRSAPrivateKeyL(aTestActionSpec.iActionBody);
212 TPtrC8 ctextIn = Input::ParseElement(aTestActionSpec.iActionBody, KCiphertextStart, KCiphertextEnd);
213 iCiphertext = VectorUtils::ParseBinaryL(ctextIn);
215 TPtrC8 ptextIn = Input::ParseElement(aTestActionSpec.iActionBody, KPlaintextStart, KPlaintextEnd);
216 iPlaintext = VectorUtils::ParseBinaryL(ptextIn);
219 void CRSADecryptVector::DoPerformanceTestActionL()
223 CRSAPKCS1v15Decryptor* decryptor = CRSAPKCS1v15Decryptor::NewL(*iPrivKey);
224 CleanupStack::PushL(decryptor);
226 TTimeIntervalMicroSeconds decryptTime(0);
228 TTimeIntervalSeconds diff(0);
229 const TTimeIntervalSeconds KIterationTime(iPerfTestIterations);
231 HBufC8 *dResult = HBufC8::NewLC(decryptor->MaxOutputLength());
232 TPtr8 dPtr = dResult->Des();
233 TPtr8* dResultPtr = &dPtr;
234 TInt noDecryptions = 0;
237 start.UniversalTime();
238 while (diff < KIterationTime)
240 decryptor->DecryptL(*iCiphertext, *dResultPtr);
243 end.SecondsFrom(start, diff);
246 decryptTime = end.MicroSecondsFrom(start);
247 TReal decrypttime = I64REAL(decryptTime.Int64());
249 if (*iPlaintext!=*dResult)
254 CleanupStack::PopAndDestroy(2); // decryptor, dResult
260 TReal rate = I64REAL(decryptTime.Int64()) / noDecryptions;
262 _LIT(KDecryptTime, "\tDecrypt Time: %f us/decryption (%i decryptions in %f us)\r\n");
263 buf.Format(KDecryptTime, rate, noDecryptions, decrypttime);
264 iOut.writeString(buf);
268 _LIT(KNoTimingInfo, "\tTest Failed! No benchmark data\n");
269 iOut.writeString(KNoTimingInfo);
273 void CRSADecryptVector::DoPerformActionL()
277 CRSAPKCS1v15Decryptor* decryptor = CRSAPKCS1v15Decryptor::NewL(*iPrivKey);
278 CleanupStack::PushL(decryptor);
280 HBufC8* decryptBuf = HBufC8::NewLC(decryptor->MaxOutputLength());
281 TPtr8 decryptPtr = decryptBuf->Des();
282 TRAPD(err, decryptor->DecryptL(*iCiphertext, decryptPtr));
283 iResult = (err == KErrNone) && (*iPlaintext == *decryptBuf);
285 CleanupStack::PopAndDestroy(decryptBuf);
286 CleanupStack::PopAndDestroy(decryptor);
292 ////////////////////////////////////////////////////////////////////////////////
293 // CRSADecryptVectorCRT
294 ////////////////////////////////////////////////////////////////////////////////
295 CTestAction* CRSADecryptVectorCRT::NewL(RFs& aFs,
296 CConsoleBase& aConsole,
298 const TTestActionSpec& aTestActionSpec)
300 CTestAction* self = CRSADecryptVectorCRT::NewLC(aFs, aConsole,
301 aOut, aTestActionSpec);
306 CTestAction* CRSADecryptVectorCRT::NewLC(RFs& aFs,
307 CConsoleBase& aConsole,
309 const TTestActionSpec& aTestActionSpec)
311 CRSADecryptVectorCRT* self = new(ELeave) CRSADecryptVectorCRT(aFs, aConsole, aOut);
312 CleanupStack::PushL(self);
313 self->ConstructL(aTestActionSpec);
317 CRSADecryptVectorCRT::~CRSADecryptVectorCRT()
324 CRSADecryptVectorCRT::CRSADecryptVectorCRT(RFs& /*aFs*/,
325 CConsoleBase& aConsole,
327 : CVectorTest(aConsole, aOut)
331 void CRSADecryptVectorCRT::ConstructL(const TTestActionSpec& aTestActionSpec)
333 CVectorTest::ConstructL(aTestActionSpec);
335 iPrivKey = VectorUtils::ReadRSAPrivateKeyCRTL(aTestActionSpec.iActionBody);
337 TPtrC8 ctextIn = Input::ParseElement(aTestActionSpec.iActionBody, KCiphertextStart, KCiphertextEnd);
338 iCiphertext = VectorUtils::ParseBinaryL(ctextIn);
340 TPtrC8 ptextIn = Input::ParseElement(aTestActionSpec.iActionBody, KPlaintextStart, KPlaintextEnd);
341 iPlaintext = VectorUtils::ParseBinaryL(ptextIn);
344 void CRSADecryptVectorCRT::DoPerformanceTestActionL()
348 CRSAPKCS1v15Decryptor* decryptor = CRSAPKCS1v15Decryptor::NewL(*iPrivKey);
349 CleanupStack::PushL(decryptor);
351 TTimeIntervalMicroSeconds decryptTime(0);
353 TTimeIntervalSeconds diff(0);
354 const TTimeIntervalSeconds KIterationTime(iPerfTestIterations);
356 TInt noDecryptions = 0;
357 HBufC8 *dResult = HBufC8::NewLC(decryptor->MaxOutputLength());
358 TPtr8 dPtr = dResult->Des();
359 TPtr8* dResultPtr = &dPtr;
362 start.UniversalTime();
363 while (diff < KIterationTime)
365 decryptor->DecryptL(*iCiphertext, *dResultPtr);
368 end.SecondsFrom(start, diff);
371 decryptTime = end.MicroSecondsFrom(start);
372 TReal decrypttime = I64REAL(decryptTime.Int64());
375 if (*iPlaintext!=*dResult)
381 CleanupStack::PopAndDestroy(2); // decryptor, dResult
387 TReal rate = I64REAL(decryptTime.Int64()) / noDecryptions;
389 _LIT(KDecryptTime, "\tDecrypt Time: %f us/decryption (%i decryptions in %f us)\r\n");
390 buf.Format(KDecryptTime, rate, noDecryptions, decrypttime);
391 iOut.writeString(buf);
395 _LIT(KNoTimingInfo, "\tTest Failed! No benchmark data\n");
396 iOut.writeString(KNoTimingInfo);
400 void CRSADecryptVectorCRT::DoPerformActionL()
404 CRSAPKCS1v15Decryptor* decryptor = CRSAPKCS1v15Decryptor::NewL(*iPrivKey);
405 CleanupStack::PushL(decryptor);
407 HBufC8* decryptBuf = HBufC8::NewLC(decryptor->MaxOutputLength());
408 TPtr8 decryptPtr = decryptBuf->Des();
409 TRAPD(err, decryptor->DecryptL(*iCiphertext, decryptPtr));
410 iResult = (err == KErrNone) && (*iPlaintext == *decryptBuf);
412 CleanupStack::PopAndDestroy(decryptBuf);
413 CleanupStack::PopAndDestroy(decryptor);
418 ////////////////////////////////////////////////////////////////////////////////
420 ////////////////////////////////////////////////////////////////////////////////
422 CTestAction* CRSASignVector::NewL(RFs& aFs,
423 CConsoleBase& aConsole,
425 const TTestActionSpec& aTestActionSpec)
427 CTestAction* self = CRSASignVector::NewLC(aFs, aConsole, aOut, aTestActionSpec);
432 CTestAction* CRSASignVector::NewLC(RFs& aFs,
433 CConsoleBase& aConsole,
435 const TTestActionSpec& aTestActionSpec)
437 CRSASignVector* self = new(ELeave) CRSASignVector(aFs, aConsole, aOut);
438 CleanupStack::PushL(self);
439 self->ConstructL(aTestActionSpec);
443 CRSASignVector::~CRSASignVector()
450 CRSASignVector::CRSASignVector(RFs& /*aFs*/,
451 CConsoleBase& aConsole,
453 : CVectorTest(aConsole, aOut)
457 void CRSASignVector::ConstructL(const TTestActionSpec& aTestActionSpec)
459 CVectorTest::ConstructL(aTestActionSpec);
461 iPrivKey = VectorUtils::ReadRSAPrivateKeyL(aTestActionSpec.iActionBody);
463 TPtrC8 digestInfoIn = Input::ParseElement(aTestActionSpec.iActionBody, KDigestInfoStart, KDigestInfoEnd);
464 iDigestInfo = VectorUtils::ParseBinaryL(digestInfoIn);
466 TPtrC8 signatureIn = Input::ParseElement(aTestActionSpec.iActionBody, KSignatureStart, KSignatureEnd);
467 RInteger integer = VectorUtils::ParseIntegerL(signatureIn);
468 CleanupStack::PushL(integer);
469 iSignature = CRSASignature::NewL(integer);
470 CleanupStack::Pop(&integer);
473 void CRSASignVector::DoPerformanceTestActionL()
477 CRSAPKCS1v15Signer* signer = CRSAPKCS1v15Signer::NewL(*iPrivKey);
478 CleanupStack::PushL(signer);
480 TPtrC8 digestPtr = iDigestInfo->Des();
482 TTimeIntervalMicroSeconds signTime(0);
484 TTimeIntervalSeconds diff(0);
485 const TTimeIntervalSeconds KIterationTime(iPerfTestIterations);
489 const CRSASignature *testSig = 0;
492 start.UniversalTime();
493 while (diff < KIterationTime)
495 testSig = signer->SignL(digestPtr);
499 end.SecondsFrom(start, diff);
502 signTime = end.MicroSecondsFrom(start);
503 TReal signtime = I64REAL(signTime.Int64());
506 testSig = signer->SignL(digestPtr);
507 if (!(*testSig==*iSignature))
513 CleanupStack::PopAndDestroy(); // signer
519 TReal rate = I64REAL(signTime.Int64()) / noSignings;
521 _LIT(KSignTime, "\tSign Time: %f us/signing (%i signings in %f us)\r\n");
522 buf.Format(KSignTime, rate, noSignings, signtime);
523 iOut.writeString(buf);
527 _LIT(KNoTimingInfo, "\tTest Failed! No benchmark data\n");
528 iOut.writeString(KNoTimingInfo);
532 void CRSASignVector::DoPerformActionL()
536 CRSAPKCS1v15Signer* digestSigner = CRSAPKCS1v15Signer::NewL(*iPrivKey);
537 CleanupStack::PushL(digestSigner);
539 TPtrC8 digestPtr2 = iDigestInfo->Des();
540 const CRSASignature* testSig2 = digestSigner->SignL(digestPtr2);
541 CleanupStack::PushL(const_cast<CRSASignature*>(testSig2));
542 iResult = (*testSig2 == *iSignature);
544 CleanupStack::PopAndDestroy(const_cast<CRSASignature*>(testSig2));
545 CleanupStack::PopAndDestroy(digestSigner);
550 ////////////////////////////////////////////////////////////////////////////////
552 ////////////////////////////////////////////////////////////////////////////////
554 CTestAction* CRSASignVectorCRT::NewL(RFs& aFs,
555 CConsoleBase& aConsole,
557 const TTestActionSpec& aTestActionSpec)
559 CTestAction* self = CRSASignVectorCRT::NewLC(aFs, aConsole, aOut, aTestActionSpec);
564 CTestAction* CRSASignVectorCRT::NewLC(RFs& aFs,
565 CConsoleBase& aConsole,
567 const TTestActionSpec& aTestActionSpec)
569 CRSASignVectorCRT* self = new(ELeave) CRSASignVectorCRT(aFs, aConsole, aOut);
570 CleanupStack::PushL(self);
571 self->ConstructL(aTestActionSpec);
575 CRSASignVectorCRT::~CRSASignVectorCRT()
582 CRSASignVectorCRT::CRSASignVectorCRT(RFs& /*aFs*/,
583 CConsoleBase& aConsole,
585 : CVectorTest(aConsole, aOut)
589 void CRSASignVectorCRT::ConstructL(const TTestActionSpec& aTestActionSpec)
591 CVectorTest::ConstructL(aTestActionSpec);
593 iPrivKey = VectorUtils::ReadRSAPrivateKeyCRTL(aTestActionSpec.iActionBody);
595 TPtrC8 digestInfoIn = Input::ParseElement(aTestActionSpec.iActionBody, KDigestInfoStart, KDigestInfoEnd);
596 iDigestInfo = VectorUtils::ParseBinaryL(digestInfoIn);
598 TPtrC8 signatureIn = Input::ParseElement(aTestActionSpec.iActionBody, KSignatureStart, KSignatureEnd);
599 RInteger integer = VectorUtils::ParseIntegerL(signatureIn);
600 CleanupStack::PushL(integer);
601 iSignature = CRSASignature::NewL(integer);
602 CleanupStack::Pop(&integer);
605 void CRSASignVectorCRT::DoPerformanceTestActionL()
609 CRSAPKCS1v15Signer* signer = CRSAPKCS1v15Signer::NewL(*iPrivKey);
610 CleanupStack::PushL(signer);
612 TPtrC8 digestPtr = iDigestInfo->Des();
614 TTimeIntervalMicroSeconds signTime(0);
616 TTimeIntervalSeconds diff(0);
617 const TTimeIntervalSeconds KIterationTime(iPerfTestIterations);
620 const CRSASignature *testSig = NULL;
623 start.UniversalTime();
624 while (diff < KIterationTime)
626 testSig = signer->SignL(digestPtr);
630 end.SecondsFrom(start, diff);
633 signTime = end.MicroSecondsFrom(start);
634 TReal signtime = I64REAL(signTime.Int64());
636 testSig = signer->SignL(digestPtr);
638 if (!(*testSig==*iSignature))
644 CleanupStack::PopAndDestroy(); // signer
650 TReal rate = I64REAL(signTime.Int64()) / noSignings;
652 _LIT(KSignTime, "\tSign Time: %f us/signing (%i signings in %f us)\r\n");
653 buf.Format(KSignTime, rate, noSignings, signtime);
654 iOut.writeString(buf);
658 _LIT(KNoTimingInfo, "\tTest Failed! No benchmark data\n");
659 iOut.writeString(KNoTimingInfo);
663 void CRSASignVectorCRT::DoPerformActionL()
667 CRSAPKCS1v15Signer* signer = CRSAPKCS1v15Signer::NewL(*iPrivKey);
668 CleanupStack::PushL(signer);
670 TPtrC8 digestPtr = iDigestInfo->Des();
671 const CRSASignature* testSig = signer->SignL(digestPtr);
672 CleanupStack::PushL(const_cast<CRSASignature*>(testSig));
675 HBufC8* theResultSig = testSig->S().BufferLC();
676 HBufC8* theExpectedSig = iSignature->S().BufferLC();
677 iResult = (theResultSig->Compare(*theExpectedSig)) ==0 ? ETrue : EFalse;
678 CleanupStack::PopAndDestroy(2);
681 iResult = (*testSig == *iSignature);
683 CleanupStack::PopAndDestroy(const_cast<CRSASignature*>(testSig));
684 CleanupStack::PopAndDestroy(signer);
690 ////////////////////////////////////////////////////////////////////////////////
692 ////////////////////////////////////////////////////////////////////////////////
694 CTestAction* CRSAVerifyVector::NewL(RFs& aFs,
695 CConsoleBase& aConsole,
697 const TTestActionSpec& aTestActionSpec)
699 CTestAction* self = CRSAVerifyVector::NewLC(aFs, aConsole, aOut, aTestActionSpec);
704 CTestAction* CRSAVerifyVector::NewLC(RFs& aFs,
705 CConsoleBase& aConsole,
707 const TTestActionSpec& aTestActionSpec)
709 CRSAVerifyVector* self = new(ELeave) CRSAVerifyVector(aFs, aConsole, aOut);
710 CleanupStack::PushL(self);
711 self->ConstructL(aTestActionSpec);
715 CRSAVerifyVector::~CRSAVerifyVector()
722 CRSAVerifyVector::CRSAVerifyVector(RFs& /*aFs*/,
723 CConsoleBase& aConsole,
725 : CVectorTest(aConsole, aOut)
729 void CRSAVerifyVector::ConstructL(const TTestActionSpec& aTestActionSpec)
731 CVectorTest::ConstructL(aTestActionSpec);
733 iPubKey = VectorUtils::ReadRSAPublicKeyL(aTestActionSpec.iActionBody);
735 TPtrC8 digestInfoIn = Input::ParseElement(aTestActionSpec.iActionBody, KDigestInfoStart, KDigestInfoEnd);
736 iDigestInfo = VectorUtils::ParseBinaryL(digestInfoIn);
738 TPtrC8 signatureIn = Input::ParseElement(aTestActionSpec.iActionBody, KSignatureStart, KSignatureEnd);
739 RInteger integer = VectorUtils::ParseIntegerL(signatureIn);
740 CleanupStack::PushL(integer);
741 iSignature = CRSASignature::NewL(integer);
742 CleanupStack::Pop(&integer);
745 void CRSAVerifyVector::DoPerformanceTestActionL()
750 TTimeIntervalMicroSeconds verifyTime(0);
752 TTimeIntervalSeconds diff(0);
753 const TTimeIntervalSeconds KIterationTime(iPerfTestIterations);
757 CRSAPKCS1v15Verifier *verifier = CRSAPKCS1v15Verifier::NewLC(*iPubKey);
760 start.UniversalTime();
761 while (diff < KIterationTime)
763 iResult = verifier->VerifyL(*iDigestInfo, *iSignature);
770 end.SecondsFrom(start, diff);
773 verifyTime = end.MicroSecondsFrom(start);
774 TReal verifytime = I64REAL(verifyTime.Int64());
776 CleanupStack::PopAndDestroy(verifier);
782 TReal rate = I64REAL(verifyTime.Int64()) / noVerifies;
784 _LIT(KVerifyTime, "\tVerify Time: %f us/verify (%i verifies in %f us)\r\n");
785 buf.Format(KVerifyTime, rate, noVerifies, verifytime);
786 iOut.writeString(buf);
790 _LIT(KNoTimingInfo, "\tTest Failed! No benchmark data\n");
791 iOut.writeString(KNoTimingInfo);
795 void CRSAVerifyVector::DoPerformActionL()
799 CRSAPKCS1v15Verifier* verifier = CRSAPKCS1v15Verifier::NewL(*iPubKey);
800 CleanupStack::PushL(verifier);
801 iResult = verifier->VerifyL(*iDigestInfo, *iSignature);
803 CleanupStack::PopAndDestroy(verifier);