crypto/weakcrypto/test/tpadding/tpaddingPKCS1.cpp
author hgs
Thu, 19 Aug 2010 11:18:56 +0530
changeset 94 0e6c5a9328b5
parent 72 de46a57f75fb
permissions -rw-r--r--
201033_01
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) 2004-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 <random.h>
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    20
#include <padding.h>
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    21
#include "tpaddingPKCS1.h"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    22
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    23
CTestPadPKCS1::CTestPadPKCS1()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    24
{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    25
   SetTestStepName(KPadPKCS1);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    26
}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    27
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    28
CTestPadPKCS1::~CTestPadPKCS1()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    29
{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    30
}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    31
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    32
TVerdict CTestPadPKCS1::doTestStepL()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    33
{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    34
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    35
   __UHEAP_MARK;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    36
   
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    37
   INFO_PRINTF1(_L("Test of PKCS1 signature padding"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    38
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    39
   SetTestStepResult(EPass);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    40
   INFO_PRINTF1(_L("Blocksize 512"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    41
   TestPKCS1SignaturePadding(512);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    42
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    43
   SetTestStepResult(EPass);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    44
   INFO_PRINTF1(_L("Blocksize 1024"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    45
   TestPKCS1SignaturePadding(1024);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    46
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    47
   SetTestStepResult(EPass);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    48
   INFO_PRINTF1(_L("Blocksize 2048"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    49
   TestPKCS1SignaturePadding(2048);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    50
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    51
   INFO_PRINTF1(_L("Test of PKCS1 encryption padding"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    52
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    53
   SetTestStepResult(EPass);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    54
   INFO_PRINTF1(_L("Blocksize 512"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    55
   TestPKCS1EncryptionPadding(512);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    56
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    57
   SetTestStepResult(EPass);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    58
   INFO_PRINTF1(_L("Blocksize 1024"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    59
   TestPKCS1EncryptionPadding(1024);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    60
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    61
   SetTestStepResult(EPass);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    62
   INFO_PRINTF1(_L("Blocksize 2048"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    63
   TestPKCS1EncryptionPadding(2048);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    64
   
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    65
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    66
   __UHEAP_MARKEND;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    67
   return TestStepResult();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    68
}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    69
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    70
void CTestPadPKCS1::TestPKCS1SignaturePadding(TInt aBlockSize)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    71
{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    72
   CPaddingPKCS1Signature *padding = CPaddingPKCS1Signature::NewLC(aBlockSize);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    73
   /*
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    74
    * The length of the data D shall not be more than k-11 octets,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    75
    * which is positive since the length k of the modulus is at
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    76
    * least 12 octets.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    77
    */
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    78
   TInt noDataBytes = aBlockSize-11;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    79
   
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    80
   for (TInt i = 0; i <= noDataBytes; i++)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    81
   {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    82
      HBufC8 *inData = HBufC8::NewLC(noDataBytes);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    83
      HBufC8 *outData = HBufC8::NewLC(aBlockSize);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    84
      TPtr8 in(inData->Des());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    85
      TPtr8 out(outData->Des());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    86
      TInt j;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    87
      
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    88
      for (j = 0; j < i; j++)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    89
      {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    90
	 TInt text('a'+j%25);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    91
	 in.Append(text);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    92
      }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    93
      
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    94
      TRAPD(err, padding->DoPadL(in, out));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    95
      TEST(err == KErrNone);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    96
      
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    97
      // check the padding.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    98
      // should have the following syntax:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    99
      // 00 || 01 || PS || 00 || D where PS is the padding octects of value 0xff
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   100
      
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   101
      TEST(out[0] == 0 && out[1] == 1);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   102
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   103
      TInt endOfPadding = aBlockSize - 1 - in.Length();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   104
      for (j = 2; j < endOfPadding; j++)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   105
      {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   106
	 TEST(out[j]==0xff);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   107
	 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   108
      }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   109
      // Check for the delimiter
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   110
      TEST(out[endOfPadding] == 0);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   111
      // Check that the rest of the data is not corrupted
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   112
      TInt startOfData = aBlockSize - in.Length();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   113
      TEST(in == out.Mid(startOfData));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   114
      CleanupStack::PopAndDestroy(2, inData); // inData, outData
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   115
   }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   116
   TestStepResult() ? INFO_PRINTF1(_L("Test failed")) : INFO_PRINTF1(_L("Test passed"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   117
   CleanupStack::PopAndDestroy(); // padding
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   118
}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   119
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   120
void CTestPadPKCS1::TestPKCS1EncryptionPadding(TInt aBlockSize)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   121
{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   122
   CPaddingPKCS1Encryption *padding = CPaddingPKCS1Encryption::NewLC(aBlockSize);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   123
   /*
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   124
    * The length of the data D shall not be more than k-11 octets,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   125
    * which is positive since the length k of the modulus is at
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   126
    * least 12 octets.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   127
    */
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   128
   TInt noDataBytes = aBlockSize-11;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   129
   
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   130
   for (TInt i = 0; i <= noDataBytes; i++)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   131
   {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   132
      HBufC8 *inData = HBufC8::NewLC(noDataBytes);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   133
      HBufC8 *outData = HBufC8::NewLC(aBlockSize);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   134
      TPtr8 in(inData->Des());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   135
      TPtr8 out(outData->Des());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   136
      TInt j;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   137
      
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   138
      for (j = 0; j < i; j++)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   139
      {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   140
	 TInt text('a'+j%25);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   141
	 in.Append(text);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   142
      }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   143
      
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   144
      TRAPD(err, padding->DoPadL(in, out));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   145
      TEST(err == KErrNone);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   146
      // check the padding.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   147
      // should have the following syntax:
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   148
      // 00 || 02 || PS || 00 || D where PS is the padding octects containing random data
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   149
      
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   150
      TEST(out[0] == 0 && out[1] == 2);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   151
      
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   152
      TInt endOfPadding = aBlockSize - 1 - in.Length();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   153
      for (j = 2; j < endOfPadding; j++)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   154
      {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   155
	 TEST(out[j]!=0);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   156
	 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   157
      }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   158
      // Check for the delimiter
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   159
      TEST(out[endOfPadding] == 0);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   160
      
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   161
      // Check that the rest of the data is not corrupted
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   162
      TInt startOfData = aBlockSize - in.Length();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   163
      TEST(in == out.Mid(startOfData));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   164
      CleanupStack::PopAndDestroy(2, inData); // inData, outData
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   165
   }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   166
   TestStepResult() ? INFO_PRINTF1(_L("Test failed")) : INFO_PRINTF1(_L("Test passed"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   167
   CleanupStack::PopAndDestroy(); // padding
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   168
}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   169
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   170
   
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   171
CTestUnpadPKCS1::CTestUnpadPKCS1()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   172
{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   173
   SetTestStepName(KUnpadPKCS1);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   174
}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   175
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   176
CTestUnpadPKCS1::~CTestUnpadPKCS1()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   177
{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   178
}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   179
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   180
TVerdict CTestUnpadPKCS1::doTestStepL()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   181
{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   182
   __UHEAP_MARK;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   183
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   184
   INFO_PRINTF1(_L("Test of PKCS1 signature unpadding"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   185
   INFO_PRINTF1(_L("Blocksize 512"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   186
   SetTestStepResult(EPass);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   187
   TestPKCS1SignatureUnpadding(512);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   188
   INFO_PRINTF1(_L("Blocksize 1024"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   189
   SetTestStepResult(EPass);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   190
   TestPKCS1SignatureUnpadding(1024);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   191
   INFO_PRINTF1(_L("Blocksize 2048"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   192
   SetTestStepResult(EPass);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   193
   TestPKCS1SignatureUnpadding(2048);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   194
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   195
   INFO_PRINTF1(_L("Test of PKCS1 encryption unpadding"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   196
   INFO_PRINTF1(_L("Blocksize 512"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   197
   SetTestStepResult(EPass);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   198
   TestPKCS1EncryptionUnpadding(512);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   199
   INFO_PRINTF1(_L("Blocksize 1024"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   200
   SetTestStepResult(EPass);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   201
   TestPKCS1EncryptionUnpadding(1024);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   202
   INFO_PRINTF1(_L("Blocksize 2048"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   203
   SetTestStepResult(EPass);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   204
   TestPKCS1EncryptionUnpadding(2048);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   205
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   206
   __UHEAP_MARKEND;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   207
   return TestStepResult();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   208
}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   209
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   210
void CTestUnpadPKCS1::TestPKCS1SignatureUnpadding(TInt aBlockSize)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   211
{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   212
   CPaddingPKCS1Signature *padding = CPaddingPKCS1Signature::NewLC(aBlockSize);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   213
   /*
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   214
    * The length of the data D shall not be more than k-11 octets,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   215
    * which is positive since the length k of the modulus is at
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   216
    * least 12 octets.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   217
    */
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   218
   TInt noDataBytes = aBlockSize-11;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   219
   
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   220
   for (TInt i = 0; i <= noDataBytes; i++)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   221
   {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   222
      HBufC8 *inData = HBufC8::NewLC(aBlockSize);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   223
      HBufC8 *outData = HBufC8::NewLC(noDataBytes);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   224
      HBufC8 *compData = HBufC8::NewLC(noDataBytes);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   225
      TPtr8 in(inData->Des());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   226
      TPtr8 out(outData->Des());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   227
      TPtr8 comp(compData->Des());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   228
      
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   229
      TInt endOfPadding = aBlockSize - 1 - i;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   230
      in.SetLength(endOfPadding+1);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   231
      in[0] = 0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   232
      in[1] = 1;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   233
      TInt j;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   234
      for (j = 2; j < endOfPadding; j++)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   235
      {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   236
	 in[j] = 0xff;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   237
      }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   238
      in[endOfPadding] = 0; // delimiter
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   239
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   240
      for (j = 0; j < i; j++)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   241
      {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   242
	 TInt text('a'+j%25);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   243
	 in.Append(text);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   244
	 comp.Append(text);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   245
      }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   246
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   247
      TRAPD(err, padding->UnPadL(in, out));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   248
      TEST(err == KErrNone);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   249
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   250
      TEST(out == comp);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   251
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   252
      TEST(out.Length() == i);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   253
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   254
      
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   255
      CleanupStack::PopAndDestroy(3, inData); // inData, outData, compData
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   256
   }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   257
   TestStepResult() ? INFO_PRINTF1(_L("Test failed")) : INFO_PRINTF1(_L("Test passed"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   258
   CleanupStack::PopAndDestroy(); // padding
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   259
}
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   260
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   261
void CTestUnpadPKCS1::TestPKCS1EncryptionUnpadding(TInt aBlockSize)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   262
{
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   263
   CPaddingPKCS1Encryption *padding = CPaddingPKCS1Encryption::NewLC(aBlockSize);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   264
   /*
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   265
    * "The length of the data D shall not be more than k-11 octets,
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   266
    * which is positive since the length k of the modulus is at
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   267
    * least 12 octets."
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   268
    */
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   269
   TInt noDataBytes = aBlockSize-11;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   270
   for (TInt i = 0; i <= noDataBytes; i++)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   271
   {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   272
      HBufC8 *inData = HBufC8::NewLC(aBlockSize);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   273
      HBufC8 *outData = HBufC8::NewLC(noDataBytes);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   274
      HBufC8 *compData = HBufC8::NewLC(noDataBytes);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   275
      TPtr8 in(inData->Des());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   276
      TPtr8 out(outData->Des());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   277
      TPtr8 comp(compData->Des());
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   278
      
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   279
      TInt endOfPadding = aBlockSize - 1 - i;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   280
      in.SetLength(endOfPadding+1);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   281
      in[0] = 0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   282
      in[1] = 2;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   283
      TBuf8<256> rnd(256);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   284
      GenerateRandomBytesL(rnd);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   285
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   286
      TInt k = 2;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   287
      TInt j = 0;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   288
      while (k < endOfPadding)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   289
      {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   290
         if (rnd[j%256])
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   291
         {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   292
            in[k++] = rnd[j%256];
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   293
         }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   294
         
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   295
         if (++j%256 == 0)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   296
         {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   297
            GenerateRandomBytesL(rnd);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   298
         }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   299
      }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   300
      in[endOfPadding] = 0; // delimiter
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   301
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   302
      for (j = 0; j < i; j++)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   303
      {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   304
	 TInt text('a'+j%25);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   305
	 in.Append(text);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   306
     comp.Append(text);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   307
      }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   308
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   309
      TRAPD(err, padding->UnPadL(in, out));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   310
      TEST(err == KErrNone);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   311
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   312
	  TEST(out == comp);		  
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   313
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   314
      TEST(out.Length() == i);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   315
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   316
      
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   317
      CleanupStack::PopAndDestroy(3, inData); // inData, outData, compData
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   318
   }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   319
   TestStepResult() ? INFO_PRINTF1(_L("Test failed")) : INFO_PRINTF1(_L("Test passed"));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   320
   CleanupStack::PopAndDestroy(); // padding
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   321
}