crypto/weakcrypto/test/tasymmetric/script_gen/utils.c
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) 2005-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
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    20
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    21
/**
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    22
 @file
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    23
*/
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    24
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    25
#include "utils.h"
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    26
#include <openssl/crypto.h>
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    27
#include <openssl/err.h>
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    28
#include <openssl/rand.h>
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    29
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    30
void printBN(BIGNUM* bn)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    31
    {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    32
    char* text = BN_bn2hex(bn);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    33
    printf("%s", text);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    34
    OPENSSL_free(text);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    35
    }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    36
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    37
void printBin(char* data, int len)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    38
    {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    39
    BIGNUM* bn = BN_new();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    40
    bn = BN_bin2bn(data, len, bn);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    41
    printBN(bn);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    42
    BN_free(bn);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    43
    }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    44
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    45
static int vectorNumber = 1;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    46
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    47
/**
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    48
 * Print the first few lines of the action block.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    49
 */
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    50
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    51
void printActionHeader(char* name, char* type)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    52
    {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    53
    printf("<action>\n");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    54
    printf("\t<actionname>%s %i (%s)</actionname>\n", name, vectorNumber++, type);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    55
    printf("\t<actiontype>%s</actiontype>\n", type);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    56
    printf("\t<actionbody>\n");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    57
    } 
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    58
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    59
/**
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    60
 * Print the last few lines of the action block.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    61
 */
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    62
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    63
void printActionFooter(BOOL passes)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    64
    {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    65
    printf("\t</actionbody>\n");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    66
    printf("\t<actionresult>\n");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    67
    printf("\t\t<result>%s</result>\n", passes ? "ETrue" : "EFalse");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    68
    printf("\t</actionresult>\n");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    69
    printf("</action>\n");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    70
    }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    71
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    72
/**
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    73
 * Print an element containg hex data.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    74
 */
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    75
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    76
void printHexElement(char* name, unsigned char* data, int len)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    77
    {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    78
    printf("\t\t<%s>", name);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    79
    printBin(data, len);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    80
    printf("</%s>\n", name);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    81
    }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    82
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    83
/**
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    84
 * Print an element containg hex data.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    85
 */
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    86
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    87
void printBNElement(char* name, BIGNUM* num)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    88
    {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    89
    printf("\t\t<%s>", name);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    90
    printBN(num);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    91
    printf("</%s>\n", name);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    92
    }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    93
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    94
/**
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    95
 * Scramble some data - used for generating tests that we expect to fail.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    96
 */
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    97
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    98
void scramble(unsigned char* data, int len)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
    99
    {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   100
    int i;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   101
    for (i = 0 ; i < len ; ++ i)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   102
        data[i] ^= i;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   103
    }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   104
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   105
/**
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   106
 * Print an openssl error and exit.
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   107
 */
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   108
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   109
void processError()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   110
    {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   111
    unsigned long err = ERR_get_error();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   112
    ERR_load_crypto_strings();
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   113
    printf("Openssl error: %s\n", ERR_error_string(err, NULL));
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   114
    exit(1);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   115
    }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   116
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   117
////////////////////////////////////////////////////////////////////////////////
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   118
// Random stuff
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   119
////////////////////////////////////////////////////////////////////////////////
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   120
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   121
int random_value = 1;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   122
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   123
void random_seed(const void* buf, int num)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   124
    {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   125
    }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   126
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   127
int random_bytes(unsigned char *buf, int num)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   128
    {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   129
    int i;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   130
    for (i=0; i<num; i++)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   131
			buf[i]=random_value++;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   132
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   133
    return(1);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   134
    }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   135
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   136
void random_cleanup(void)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   137
    {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   138
    }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   139
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   140
void random_add(const void *buf, int num, double entropy)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   141
    {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   142
    }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   143
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   144
int random_pseudorand(unsigned char *buf, int num)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   145
    {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   146
    return 1;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   147
    }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   148
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   149
int random_status(void)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   150
    {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   151
    return 1;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   152
    }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   153
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   154
RAND_METHOD ourRNG = {random_seed, random_bytes, random_cleanup, random_add, random_pseudorand, random_status};
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   155
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   156
void testOurRandom()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   157
    {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   158
    char data[16];
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   159
    int i;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   160
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   161
    RAND_bytes(data, 16);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   162
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   163
    for (i = 0 ; i < 16 ; ++i)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   164
        {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   165
        if (data[i] != i + 1)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   166
            {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   167
            printf("Random number generator not crippled\n");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   168
            exit(1);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   169
            }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   170
        }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   171
    }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   172
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   173
void setOurRandom()
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   174
    {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   175
    random_value = 1;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   176
    RAND_set_rand_method(&ourRNG);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   177
    }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   178
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   179
/** Print C source for assinging binary data to a variable. */
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   180
void printCBin(char* varname, unsigned char* data, int len)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   181
    {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   182
    int i, j;
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   183
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   184
    printf("\tunsigned char %s[] =", varname);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   185
    for (i = 0 ; i < len ; i += 16)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   186
        {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   187
        printf("\n\t\t\"");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   188
        for (j = i ; j < len && j < (i + 16) ; ++j)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   189
            {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   190
            printf("\\x%02x", data[j]);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   191
            }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   192
        printf("\"");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   193
        }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   194
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   195
    printf(";\n\n");
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   196
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   197
    printf("\tint %s_len = %i;\n\n", varname, len);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   198
    }
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   199
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   200
/** Print C source for assigning the binary form of a BIGNUM to a variable. */
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   201
void printCBN(char* varname, BIGNUM* bignum)
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   202
    {
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   203
    int len = BN_num_bytes(bignum);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   204
    unsigned char buffer[len];
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   205
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   206
    BN_bn2bin(bignum, buffer);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   207
    printCBin(varname, buffer, len);
de46a57f75fb 201023_02
hgs
parents:
diff changeset
   208
    }