crypto/weakcrypto/test/tasymmetric/tdsavector.cpp
author hgs
Thu, 24 Jun 2010 15:39:07 +0530
changeset 72 de46a57f75fb
permissions -rw-r--r--
201023_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
72
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     1
/*
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     2
* Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     3
* All rights reserved.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     8
*
de46a57f75fb 201023_02
hgs
parents:
diff changeset
     9
* Initial Contributors:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    11
*
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    12
* Contributors:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    13
*
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    14
* Description: 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    15
*
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    16
*/
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    17
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    18
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    19
#include "tdsavector.h"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    20
#include "tvectorutils.h"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    21
#include "t_input.h"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    22
#include <bigint.h>
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    23
#include "tbrokenrandom.h"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    24
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    25
////////////////////////////////////////////////////////////////////////////////
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    26
// CDSASignVector
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    27
////////////////////////////////////////////////////////////////////////////////
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    28
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    29
CTestAction* CDSASignVector::NewL(RFs& aFs,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    30
                                  CConsoleBase& aConsole,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    31
                                  Output& aOut, 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    32
                                  const TTestActionSpec& aTestActionSpec)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    33
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    34
	CTestAction* self = CDSASignVector::NewLC(aFs, aConsole, aOut, aTestActionSpec);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    35
	CleanupStack::Pop();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    36
	return self;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    37
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    38
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    39
CTestAction* CDSASignVector::NewLC(RFs& aFs,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    40
                                   CConsoleBase& aConsole,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    41
                                   Output& aOut, 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    42
                                   const TTestActionSpec& aTestActionSpec)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    43
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    44
	CDSASignVector* self = new(ELeave) CDSASignVector(aFs, aConsole, aOut);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    45
	CleanupStack::PushL(self);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    46
	self->ConstructL(aTestActionSpec);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    47
	return self;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    48
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    49
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    50
CDSASignVector::~CDSASignVector()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    51
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    52
    delete iPrivKey;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    53
	delete iSignature;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    54
	delete iK;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    55
	delete iSigInput;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    56
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    57
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    58
CDSASignVector::CDSASignVector(RFs& /*aFs*/, 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    59
                               CConsoleBase& aConsole,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    60
                               Output& aOut)					 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    61
    : CVectorTest(aConsole, aOut)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    62
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    63
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    64
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    65
void CDSASignVector::ConstructL(const TTestActionSpec& aTestActionSpec)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    66
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    67
	CVectorTest::ConstructL(aTestActionSpec);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    68
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    69
    iPrivKey = VectorUtils::ReadDSAPrivateKeyL(aTestActionSpec.iActionBody);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    70
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    71
	iMessage.Set(Input::ParseElement(aTestActionSpec.iActionBody, _L8("<m>")));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    72
	iK = Input::ParseElementHexL(aTestActionSpec.iActionBody, _L8("<k>"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    73
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    74
	iSignature = VectorUtils::ReadDSASignatureL(aTestActionSpec.iActionBody);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    75
	iSigInput = CHashingSignatureInput::NewL(CMessageDigest::ESHA1);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    76
	iSigInput->Update(iMessage);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    77
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    78
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    79
void CDSASignVector::DoPerformActionL()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    80
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    81
	__UHEAP_MARK;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    82
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    83
	CRandomSetSource* random = new(ELeave)CRandomSetSource(*iK);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    84
	SetThreadRandomLC(random);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    85
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    86
    CDSASigner* signer = CDSASigner::NewLC(*iPrivKey);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    87
	const CDSASignature* testSig = signer->SignL(iSigInput->Final());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    88
    iResult = (*testSig == *iSignature);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    89
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    90
	delete testSig;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    91
    CleanupStack::PopAndDestroy(signer);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    92
	CleanupStack::PopAndDestroy(); //SetThreadRandomLC
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    93
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    94
	__UHEAP_MARKEND;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    95
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    96
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    97
void CDSASignVector::DoPerformanceTestActionL()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    98
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    99
	iResult = ETrue;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   100
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   101
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   102
void CDSASignVector::DoCheckResult(TInt /*aError*/)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   103
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   104
//	If using Keith's fixed up testframework for testing failures, iResult will 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   105
//	have already been corrected for a deliberate fail result.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   106
//	If not using Keith's testframework iResult is still a fail result at this
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   107
//	point, so now's the time to adjust for deliberate failure.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   108
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   109
	if (!iResult)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   110
		iResult = (iResult && iExpectedResult) || (!iResult && !iExpectedResult);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   111
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   112
	if( iResult == EFalse )
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   113
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   114
		iConsole.Printf(_L("X"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   115
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   116
	else 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   117
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   118
		iConsole.Printf(_L("."));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   119
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   120
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   121
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   122
////////////////////////////////////////////////////////////////////////////////
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   123
// CDSAVerifyVector
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   124
////////////////////////////////////////////////////////////////////////////////
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   125
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   126
CTestAction* CDSAVerifyVector::NewL(RFs& aFs,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   127
                                  CConsoleBase& aConsole,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   128
                                  Output& aOut, 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   129
                                  const TTestActionSpec& aTestActionSpec)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   130
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   131
	CTestAction* self = CDSAVerifyVector::NewLC(aFs, aConsole, aOut, aTestActionSpec);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   132
	CleanupStack::Pop();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   133
	return self;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   134
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   135
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   136
CTestAction* CDSAVerifyVector::NewLC(RFs& aFs,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   137
                                   CConsoleBase& aConsole,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   138
                                   Output& aOut, 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   139
                                   const TTestActionSpec& aTestActionSpec)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   140
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   141
	CDSAVerifyVector* self = new(ELeave) CDSAVerifyVector(aFs, aConsole, aOut);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   142
	CleanupStack::PushL(self);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   143
	self->ConstructL(aTestActionSpec);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   144
	return self;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   145
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   146
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   147
CDSAVerifyVector::~CDSAVerifyVector()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   148
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   149
    delete iPubKey;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   150
	delete iSignature;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   151
	delete iMessage;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   152
	delete iSigInput;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   153
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   154
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   155
CDSAVerifyVector::CDSAVerifyVector(RFs& /*aFs*/, 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   156
                                   CConsoleBase& aConsole,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   157
                                   Output& aOut)					 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   158
    : CVectorTest(aConsole, aOut)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   159
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   160
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   161
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   162
void CDSAVerifyVector::ConstructL(const TTestActionSpec& aTestActionSpec)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   163
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   164
	CVectorTest::ConstructL(aTestActionSpec);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   165
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   166
    iPubKey = VectorUtils::ReadDSAPublicKeyL(aTestActionSpec.iActionBody);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   167
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   168
	TPtrC8 message(Input::ParseElement(aTestActionSpec.iActionBody, _L8("<m>")));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   169
	if (message.Length()==0)	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   170
		iMessage = Input::ParseElementHexL(aTestActionSpec.iActionBody, _L8("<hexm>"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   171
	else
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   172
		iMessage = message.AllocL();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   173
		
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   174
	iSignature = VectorUtils::ReadDSASignatureL(aTestActionSpec.iActionBody);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   175
	iSigInput = CHashingSignatureInput::NewL(CMessageDigest::ESHA1);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   176
	iSigInput->Update(*iMessage);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   177
	}	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   178
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   179
void CDSAVerifyVector::DoPerformActionL()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   180
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   181
	__UHEAP_MARK;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   182
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   183
    CDSAVerifier* verifier = CDSAVerifier::NewLC(*iPubKey);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   184
    iResult = verifier->VerifyL(iSigInput->Final(), *iSignature);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   185
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   186
    CleanupStack::PopAndDestroy(verifier);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   187
	__UHEAP_MARKEND;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   188
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   189
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   190
void CDSAVerifyVector::DoPerformanceTestActionL()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   191
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   192
	iResult = ETrue;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   193
	}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   194
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   195
void CDSAVerifyVector::DoCheckResult(TInt /*aError*/)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   196
	{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   197
//	If using Keith's fixed up testframework for testing failures, iResult will 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   198
//	have already been corrected for a deliberate fail result.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   199
//	If not using Keith's testframework iResult is still a fail result at this
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   200
//	point, so now's the time to adjust for deliberate failure.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   201
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   202
	if (!iResult)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   203
		iResult = (iResult && iExpectedResult) || (!iResult && !iExpectedResult);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   204
	
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   205
	if( iResult == EFalse )
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   206
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   207
		iConsole.Printf(_L("X"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   208
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   209
	else 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   210
		{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   211
		iConsole.Printf(_L("."));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   212
		}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   213
	}