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