os/security/crypto/weakcrypto/test/tasymmetric/tvectorutils.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
/*
sl@0
     2
* Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     3
* All rights reserved.
sl@0
     4
* This component and the accompanying materials are made available
sl@0
     5
* under the terms of the License "Eclipse Public License v1.0"
sl@0
     6
* which accompanies this distribution, and is available
sl@0
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     8
*
sl@0
     9
* Initial Contributors:
sl@0
    10
* Nokia Corporation - initial contribution.
sl@0
    11
*
sl@0
    12
* Contributors:
sl@0
    13
*
sl@0
    14
* Description: 
sl@0
    15
*
sl@0
    16
*/
sl@0
    17
sl@0
    18
sl@0
    19
#include "tvectorutils.h"
sl@0
    20
#include "t_input.h"
sl@0
    21
sl@0
    22
//	RSA
sl@0
    23
_LIT8(KModStart, "<modulus>");
sl@0
    24
_LIT8(KModEnd, "</modulus>");
sl@0
    25
_LIT8(KPubExpStart, "<publicExponent>");
sl@0
    26
_LIT8(KPubExpEnd, "</publicExponent>");
sl@0
    27
_LIT8(KPrivExpStart, "<privateExponent>");
sl@0
    28
_LIT8(KPrivExpEnd, "</privateExponent>");
sl@0
    29
_LIT8(KPStart, "<P>");
sl@0
    30
_LIT8(KPEnd, "</P>");
sl@0
    31
_LIT8(KQStart, "<Q>");
sl@0
    32
_LIT8(KQEnd, "</Q>");
sl@0
    33
_LIT8(KdPStart, "<dP>");
sl@0
    34
_LIT8(KdPEnd, "</dP>");
sl@0
    35
_LIT8(KdQStart, "<dQ>");
sl@0
    36
_LIT8(KdQEnd, "</dQ>");
sl@0
    37
_LIT8(KqInvStart, "<qInv>");
sl@0
    38
_LIT8(KqInvEnd, "</qInv>");
sl@0
    39
sl@0
    40
_LIT8(KTrueVal, "ETrue");
sl@0
    41
_LIT8(KFalseVal, "EFalse");
sl@0
    42
sl@0
    43
RInteger VectorUtils::ParseIntegerL(const TDesC8& aDes)
sl@0
    44
    {
sl@0
    45
	HBufC8* buf = ParseBinaryL(aDes);
sl@0
    46
	CleanupStack::PushL(buf);
sl@0
    47
    RInteger result = RInteger::NewL(*buf);
sl@0
    48
    CleanupStack::PopAndDestroy(buf);
sl@0
    49
sl@0
    50
    return result;
sl@0
    51
    }
sl@0
    52
sl@0
    53
HBufC8* VectorUtils::ParseBinaryL(const TDesC8& aDes)
sl@0
    54
{
sl@0
    55
    __ASSERT_ALWAYS(aDes.Length() % 2 == 0, User::Panic(_L("ParseBinaryL"), KErrArgument));
sl@0
    56
	int length = aDes.Length() / 2;
sl@0
    57
	HBufC8* buf = HBufC8::NewL(length);
sl@0
    58
    TPtr8 ptr = buf->Des();
sl@0
    59
	ptr.SetLength(length);
sl@0
    60
sl@0
    61
    for (TInt i = 0 ; i < aDes.Length() ; i += 2)
sl@0
    62
        {
sl@0
    63
        TUint8 tmp;
sl@0
    64
        tmp=(TUint8)(aDes[i]-(aDes[i]>'9'?('A'-10):'0'));
sl@0
    65
        tmp*=16;
sl@0
    66
        tmp|=(TUint8)(aDes[i+1]-(aDes[i+1]>'9'?('A'-10):'0'));
sl@0
    67
		ptr[i / 2] = tmp;
sl@0
    68
        }
sl@0
    69
sl@0
    70
	return buf;
sl@0
    71
}
sl@0
    72
sl@0
    73
// Print an Integer into hex, only works for positive integers
sl@0
    74
TDesC* VectorUtils::PrintIntegerL(const TInteger& aInt)
sl@0
    75
{
sl@0
    76
	HBufC8* binary = aInt.BufferLC();
sl@0
    77
	TDesC* result = PrintBinaryL(*binary);
sl@0
    78
	CleanupStack::PopAndDestroy(binary);
sl@0
    79
sl@0
    80
	return result;
sl@0
    81
}
sl@0
    82
sl@0
    83
// Print a binary string into hex
sl@0
    84
TDesC* VectorUtils::PrintBinaryL(const TDesC8& aData)
sl@0
    85
{
sl@0
    86
	int length = aData.Length() * 2;
sl@0
    87
	HBufC* buf = HBufC::NewL(length);
sl@0
    88
	TPtr ptr = buf->Des();
sl@0
    89
	ptr.SetLength(length);
sl@0
    90
sl@0
    91
	for (int i = 0 ; i < aData.Length() ; ++i)
sl@0
    92
		{
sl@0
    93
		TUint8 val = aData[i];
sl@0
    94
		TUint8 n = (TUint8) ((val & 0xf0) >> 4);
sl@0
    95
		ptr[i * 2] = (TUint8) (n < 10 ? ('0' + n) : ('A' + n - 10));
sl@0
    96
		n = (TUint8) (val & 0x0f);
sl@0
    97
		ptr[i * 2 + 1] = (TUint8) (n < 10 ? ('0' + n) : ('A' + n - 10));
sl@0
    98
		}
sl@0
    99
sl@0
   100
	return buf;
sl@0
   101
}
sl@0
   102
sl@0
   103
TBool VectorUtils::ParseBoolL(const TDesC8& aDes)
sl@0
   104
    {
sl@0
   105
    TBool result = EFalse;
sl@0
   106
sl@0
   107
    if (aDes == KTrueVal)
sl@0
   108
        result = ETrue;
sl@0
   109
    else if (aDes != KFalseVal)
sl@0
   110
        User::Leave(KErrArgument);
sl@0
   111
sl@0
   112
    return result;
sl@0
   113
    }
sl@0
   114
sl@0
   115
CRSAPublicKey* VectorUtils::ReadRSAPublicKeyL(const TDesC8& aData)
sl@0
   116
    {
sl@0
   117
	TPtrC8 modIn = Input::ParseElement(aData, KModStart, KModEnd);
sl@0
   118
    RInteger mod = ParseIntegerL(modIn);
sl@0
   119
	CleanupStack::PushL(mod);
sl@0
   120
sl@0
   121
	TPtrC8 pubExpIn = Input::ParseElement(aData, KPubExpStart, KPubExpEnd);
sl@0
   122
	RInteger pubExp = ParseIntegerL(pubExpIn);
sl@0
   123
	CleanupStack::PushL(pubExp);
sl@0
   124
sl@0
   125
	CRSAPublicKey* result = CRSAPublicKey::NewL(mod, pubExp);
sl@0
   126
sl@0
   127
	CleanupStack::Pop(&pubExp);
sl@0
   128
	CleanupStack::Pop(&mod);
sl@0
   129
    return result;
sl@0
   130
    }
sl@0
   131
sl@0
   132
CRSAPrivateKeyStandard* VectorUtils::ReadRSAPrivateKeyL(const TDesC8& aData)
sl@0
   133
    {
sl@0
   134
	TPtrC8 modIn = Input::ParseElement(aData, KModStart, KModEnd);
sl@0
   135
    RInteger mod = ParseIntegerL(modIn);
sl@0
   136
	CleanupStack::PushL(mod);
sl@0
   137
sl@0
   138
	TPtrC8 privExpIn = Input::ParseElement(aData, KPrivExpStart, KPrivExpEnd);
sl@0
   139
	RInteger privExp = ParseIntegerL(privExpIn);
sl@0
   140
	CleanupStack::PushL(privExp);
sl@0
   141
sl@0
   142
	CRSAPrivateKeyStandard* result  = CRSAPrivateKeyStandard::NewL(mod, privExp);
sl@0
   143
sl@0
   144
	CleanupStack::Pop(&privExp);
sl@0
   145
	CleanupStack::Pop(&mod);
sl@0
   146
    return result;
sl@0
   147
    }
sl@0
   148
sl@0
   149
CRSAPrivateKeyCRT* VectorUtils::ReadRSAPrivateKeyCRTL(const TDesC8& aData)
sl@0
   150
    {
sl@0
   151
	TPtrC8 modIn = Input::ParseElement(aData, KModStart, KModEnd);
sl@0
   152
    RInteger mod = ParseIntegerL(modIn);
sl@0
   153
	CleanupStack::PushL(mod);
sl@0
   154
sl@0
   155
	TPtrC8 pIn = Input::ParseElement(aData, KPStart, KPEnd);
sl@0
   156
	RInteger P = ParseIntegerL(pIn);
sl@0
   157
	CleanupStack::PushL(P);
sl@0
   158
sl@0
   159
	TPtrC8 qIn = Input::ParseElement(aData, KQStart, KQEnd);
sl@0
   160
	RInteger Q = ParseIntegerL(qIn);
sl@0
   161
	CleanupStack::PushL(Q);
sl@0
   162
	
sl@0
   163
	TPtrC8 dpIn = Input::ParseElement(aData, KdPStart, KdPEnd);
sl@0
   164
	RInteger dP = ParseIntegerL(dpIn);
sl@0
   165
	CleanupStack::PushL(dP);
sl@0
   166
	
sl@0
   167
	TPtrC8 dqIn = Input::ParseElement(aData, KdQStart, KdQEnd);
sl@0
   168
	RInteger dQ = ParseIntegerL(dqIn);
sl@0
   169
	CleanupStack::PushL(dQ);
sl@0
   170
sl@0
   171
	TPtrC8 qInvIn = Input::ParseElement(aData, KqInvStart, KqInvEnd);
sl@0
   172
	RInteger qInv = ParseIntegerL(qInvIn);
sl@0
   173
	CleanupStack::PushL(qInv);
sl@0
   174
	
sl@0
   175
	CRSAPrivateKeyCRT* privKey  = CRSAPrivateKeyCRT::NewL(mod, P, Q, dP, dQ, qInv);
sl@0
   176
sl@0
   177
	CleanupStack::Pop(&qInv);
sl@0
   178
	CleanupStack::Pop(&dQ);
sl@0
   179
	CleanupStack::Pop(&dP);
sl@0
   180
	CleanupStack::Pop(&Q);
sl@0
   181
	CleanupStack::Pop(&P);
sl@0
   182
	CleanupStack::Pop(&mod);
sl@0
   183
    return (privKey);
sl@0
   184
    }
sl@0
   185
sl@0
   186
CDSAPublicKey* VectorUtils::ReadDSAPublicKeyL(const TDesC8& aData)
sl@0
   187
    {
sl@0
   188
	TPtrC8 pIn = Input::ParseElement(aData, _L8("<p>"));
sl@0
   189
    RInteger p = ParseIntegerL(pIn);
sl@0
   190
	CleanupStack::PushL(p);
sl@0
   191
sl@0
   192
	TPtrC8 qIn = Input::ParseElement(aData, _L8("<q>"));
sl@0
   193
    RInteger q = ParseIntegerL(qIn);
sl@0
   194
	CleanupStack::PushL(q);
sl@0
   195
sl@0
   196
	TPtrC8 gIn = Input::ParseElement(aData, _L8("<g>"));
sl@0
   197
    RInteger g = ParseIntegerL(gIn);
sl@0
   198
	CleanupStack::PushL(g);
sl@0
   199
sl@0
   200
	TPtrC8 yIn = Input::ParseElement(aData, _L8("<y>"));
sl@0
   201
    RInteger y = ParseIntegerL(yIn);
sl@0
   202
	CleanupStack::PushL(y);
sl@0
   203
sl@0
   204
	CDSAPublicKey* result = CDSAPublicKey::NewL(p, q, g, y);
sl@0
   205
sl@0
   206
	CleanupStack::Pop(&y);
sl@0
   207
	CleanupStack::Pop(&g);
sl@0
   208
	CleanupStack::Pop(&q);
sl@0
   209
	CleanupStack::Pop(&p);
sl@0
   210
sl@0
   211
    return result;
sl@0
   212
    }
sl@0
   213
sl@0
   214
CDSAPrivateKey* VectorUtils::ReadDSAPrivateKeyL(const TDesC8& aData)
sl@0
   215
    {
sl@0
   216
	TPtrC8 pIn = Input::ParseElement(aData, _L8("<p>"));
sl@0
   217
    RInteger p = ParseIntegerL(pIn);
sl@0
   218
	CleanupStack::PushL(p);
sl@0
   219
sl@0
   220
	TPtrC8 qIn = Input::ParseElement(aData, _L8("<q>"));
sl@0
   221
    RInteger q = ParseIntegerL(qIn);
sl@0
   222
	CleanupStack::PushL(q);
sl@0
   223
sl@0
   224
	TPtrC8 gIn = Input::ParseElement(aData, _L8("<g>"));
sl@0
   225
    RInteger g = ParseIntegerL(gIn);
sl@0
   226
	CleanupStack::PushL(g);
sl@0
   227
sl@0
   228
	TPtrC8 xIn = Input::ParseElement(aData, _L8("<x>"));
sl@0
   229
    RInteger x = ParseIntegerL(xIn);
sl@0
   230
	CleanupStack::PushL(x);
sl@0
   231
sl@0
   232
	CDSAPrivateKey* result = CDSAPrivateKey::NewL(p, q, g, x);
sl@0
   233
sl@0
   234
	CleanupStack::Pop(&x);
sl@0
   235
	CleanupStack::Pop(&g);
sl@0
   236
	CleanupStack::Pop(&q);
sl@0
   237
	CleanupStack::Pop(&p);
sl@0
   238
sl@0
   239
    return result;
sl@0
   240
    }
sl@0
   241
sl@0
   242
CDSASignature* VectorUtils::ReadDSASignatureL(const TDesC8& aData)
sl@0
   243
    {
sl@0
   244
	TPtrC8 rIn = Input::ParseElement(aData, _L8("<r>"));
sl@0
   245
    RInteger r = ParseIntegerL(rIn);
sl@0
   246
	CleanupStack::PushL(r);
sl@0
   247
sl@0
   248
	TPtrC8 sIn = Input::ParseElement(aData, _L8("<s>"));
sl@0
   249
    RInteger s = ParseIntegerL(sIn);
sl@0
   250
	CleanupStack::PushL(s);
sl@0
   251
sl@0
   252
	CDSASignature* result = CDSASignature::NewL(r, s);
sl@0
   253
sl@0
   254
	CleanupStack::Pop(&s);
sl@0
   255
	CleanupStack::Pop(&r);
sl@0
   256
sl@0
   257
    return result;
sl@0
   258
    }