X-Git-Url: https://git.cryptolib.org/?a=blobdiff_plain;ds=sidebyside;f=test_src%2Fmain-rsaes_oaep-test.c;h=3ed60dd78af89c7fb84f78a7fb2948afd094350a;hb=4b5da1dc27a791b5c448274a3db09cd035b33493;hp=f3199756299931d92de47944266cfe0601028ab2;hpb=cc6b183296a5852449e3324737e2a2dece788786;p=avr-crypto-lib.git diff --git a/test_src/main-rsaes_oaep-test.c b/test_src/main-rsaes_oaep-test.c index f319975..3ed60dd 100644 --- a/test_src/main-rsaes_oaep-test.c +++ b/test_src/main-rsaes_oaep-test.c @@ -1,7 +1,7 @@ /* main-dsa-test.c */ /* This file is part of the ARM-Crypto-Lib. - Copyright (C) 2010 Daniel Otte (daniel.otte@rub.de) + Copyright (C) 2006-2015 Daniel Otte (bg@nerilex.org) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -32,7 +32,7 @@ #include "performance_test.h" -const char* algo_name = "RSAES-OAEP"; +const char *algo_name = "RSAES-OAEP"; #define BIGINT_CEIL(x) ((((x) + sizeof(bigint_word_t) - 1) / sizeof(bigint_word_t)) * sizeof(bigint_word_t)) #define BIGINT_OFF(x) ((sizeof(bigint_word_t) - (x) % sizeof(bigint_word_t)) % sizeof(bigint_word_t)) @@ -356,7 +356,7 @@ uint8_t convert_nibble(uint8_t c){ const char *block_ignore_string=" \t\r\n,;"; #define BUFFER_LIMIT 120 -uint16_t read_os(void* dst, uint16_t length, const char* ignore_string){ +uint16_t read_os(void *dst, uint16_t length, const char *ignore_string){ uint16_t counter = 0; uint16_t c; uint8_t v, tmp = 0, idx = 0; @@ -389,7 +389,7 @@ uint16_t read_os(void* dst, uint16_t length, const char* ignore_string){ return counter; } -uint16_t own_atou(const char* str){ +uint16_t own_atou(const char *str){ uint16_t r=0; while(*str && *str >= '0' && *str <= '9'){ r *= 10; @@ -398,7 +398,7 @@ uint16_t own_atou(const char* str){ return r; } -uint8_t read_bigint(bigint_t* a, char* prompt){ +uint8_t read_bigint(bigint_t *a, char *prompt){ uint16_t read_length, actual_length; uint8_t off; uint8_t *buffer; @@ -422,7 +422,7 @@ uint8_t read_bigint(bigint_t* a, char* prompt){ return 1; } a->wordv = (bigint_word_t*)buffer; - a->length_B = (read_length + sizeof(bigint_word_t) - 1) / sizeof(bigint_word_t); + a->length_W = (read_length + sizeof(bigint_word_t) - 1) / sizeof(bigint_word_t); a->info = 0; bigint_changeendianess(a); bigint_adjust(a); @@ -430,48 +430,24 @@ uint8_t read_bigint(bigint_t* a, char* prompt){ } uint8_t pre_alloc_key_crt(void){ - uint8_t c; - pub_key.modulus = malloc(sizeof(bigint_t)); - if(!pub_key.modulus){ - cli_putstr_P(PSTR("\r\nERROR: OOM!")); - return 2; - } - priv_key.modulus = pub_key.modulus; priv_key.n = 5; - priv_key.components = malloc(5 * sizeof(bigint_t*)); + priv_key.components = malloc(5 * sizeof(bigint_t)); if(!priv_key.components){ cli_putstr_P(PSTR("\r\nERROR: OOM!")); return 2; } - pub_key.exponent = malloc(sizeof(bigint_t)); - if(!pub_key.exponent){ - cli_putstr_P(PSTR("\r\nERROR: OOM!")); - return 2; - } - for(c=0; c<5; ++c){ - priv_key.components[c] = malloc(sizeof(bigint_t)); - if(!priv_key.components[c]){ - cli_putstr_P(PSTR("\r\nERROR: OOM!")); - return 2; - } - } return 0; } void free_key(void){ uint8_t c; - free(pub_key.modulus->wordv); - free(pub_key.exponent->wordv); - free(pub_key.modulus); - pub_key.modulus = priv_key.modulus = NULL; - free(pub_key.exponent); - pub_key.exponent = NULL; + free(pub_key.modulus.wordv); + free(pub_key.exponent.wordv); for(c = 0; c < priv_key.n; ++c){ - free(priv_key.components[c]->wordv); - free(priv_key.components[c]); + free(priv_key.components[c].wordv); } free(priv_key.components); - priv_key.components = NULL; + keys_allocated = 0; } uint8_t read_key_crt(void){ @@ -479,111 +455,43 @@ uint8_t read_key_crt(void){ cli_putstr_P(PSTR("\r\n== reading key (crt) ==")); r = pre_alloc_key_crt(); if(r) return r; - r = read_bigint(pub_key.modulus,"\r\n = module ="); + r = read_bigint(&pub_key.modulus,"\r\n = module ="); if(r) return r; - r = read_bigint(pub_key.exponent,"\r\n = public exponent ="); + memcpy(&priv_key.modulus, &pub_key.modulus, sizeof(bigint_t)); + r = read_bigint(&pub_key.exponent,"\r\n = public exponent ="); if(r) return r; - r = read_bigint(priv_key.components[0],"\r\n = p (first prime) ="); + r = read_bigint(&(priv_key.components[0]),"\r\n = p (first prime) ="); if(r) return r; - r = read_bigint(priv_key.components[1],"\r\n = q (second prime) ="); + r = read_bigint(&(priv_key.components[1]),"\r\n = q (second prime) ="); if(r) return r; - r = read_bigint(priv_key.components[2],"\r\n = dp (p's exponent) ="); + r = read_bigint(&(priv_key.components[2]),"\r\n = dp (p's exponent) ="); if(r) return r; - r = read_bigint(priv_key.components[3],"\r\n = dq (q's exponent) ="); + r = read_bigint(&(priv_key.components[3]),"\r\n = dq (q's exponent) ="); if(r) return r; - r = read_bigint(priv_key.components[4],"\r\n = qInv (q' coefficient) ="); + r = read_bigint(&(priv_key.components[4]),"\r\n = qInv (q' coefficient) ="); return r; } uint8_t read_key_conv(void){ uint8_t r; - cli_putstr_P(PSTR("\r\n== reading key (crt) ==")); - pub_key.modulus = malloc(sizeof(bigint_t)); - if(!pub_key.modulus){ + priv_key.components = malloc(sizeof(bigint_t)); + if(!priv_key.components){ cli_putstr_P(PSTR("\r\nERROR: OOM!")); return 2; } - r = read_bigint(pub_key.modulus,"\r\n = module ="); + cli_putstr_P(PSTR("\r\n== reading key (conv) ==")); + r = read_bigint(&pub_key.modulus,"\r\n = module ="); if(r) return r; - priv_key.modulus = pub_key.modulus; + memcpy(&priv_key.modulus, &pub_key.modulus, sizeof(bigint_t)); priv_key.n = 1; - pub_key.exponent = malloc(sizeof(bigint_t)); - if(!pub_key.exponent){ - cli_putstr_P(PSTR("\r\nERROR: OOM!")); - return 2; - } - priv_key.components = malloc(sizeof(bigint_t*)); - if(!priv_key.components){ - cli_putstr_P(PSTR("\r\nERROR: OOM!")); - return 2; - } - priv_key.components[0] = malloc(sizeof(bigint_t)); - if(!priv_key.components[0]){ - cli_putstr_P(PSTR("\r\nERROR: OOM!")); - return 2; - } - r = read_bigint(pub_key.exponent,"\r\n = public exponent ="); + r = read_bigint(&pub_key.exponent,"\r\n = public exponent ="); if(r) return r; - r = read_bigint(priv_key.components[0],"\r\n = private exponent ="); + r = read_bigint(priv_key.components,"\r\n = private exponent ="); return r; } -void load_priv_conventional(void){ - bigint_t *epriv; - epriv = malloc(sizeof(bigint_t)); - if(!epriv){ - cli_putstr_P(PSTR("\r\nERROR: OOM!")); - return; - } - epriv->length_B = (sizeof(PRIV_EXPONENT) + sizeof(bigint_word_t) - 1) / sizeof(bigint_word_t); - epriv->wordv = malloc(epriv->length_B * sizeof(bigint_word_t)); - if(!epriv->wordv){ - cli_putstr_P(PSTR("\r\nERROR: OOM!")); - return; - } - memcpy(epriv->wordv, PRIV_EXPONENT, sizeof(PRIV_EXPONENT)); - priv_key.components = malloc(sizeof(bigint_t*)); - priv_key.components[0] = epriv; - priv_key.n = 1; - bigint_changeendianess(epriv); - bigint_adjust(epriv); -} - - -void load_priv_crt_mono(void){ - bigint_t **v; - const uint8_t *bv[5] = {P,Q,DP,DQ,QINV}; - uint16_t sv[5] = {sizeof(P), sizeof(Q), sizeof(DP), sizeof(DQ), sizeof(QINV)}; - uint8_t i; - v = malloc(5 * sizeof(bigint_t)); - if(!v){ - cli_putstr_P(PSTR("\r\nERROR: OOM!")); - return; - } - priv_key.components = malloc(5*sizeof(bigint_t*)); - if(!priv_key.components){ - cli_putstr_P(PSTR("\r\nERROR: OOM!")); - return; - } - priv_key.n = 5; - for(i=0; i<5; ++i){ - v[i] = malloc(sizeof(bigint_t)); - v[i]->info = 0; - v[i]->length_B = (sv[i] + sizeof(bigint_word_t) - 1) / sizeof(bigint_word_t); - v[i]->wordv = calloc(v[i]->length_B , sizeof(bigint_word_t)); - if(!v[i]->wordv){ - cli_putstr_P(PSTR("\r\nERROR: OOM!")); - return; - } - memcpy(v[i]->wordv, bv[i], sv[i]); - bigint_changeendianess(v[i]); - bigint_adjust(v[i]); - priv_key.components[i] = v[i]; - } -} - -uint8_t load_bigint_from_os(bigint_t* a, PGM_VOID_P os, uint16_t length_B){ - a->length_B = BIGINT_CEIL(length_B) / sizeof(bigint_word_t); +uint8_t load_bigint_from_os(bigint_t *a, PGM_VOID_P os, uint16_t length_B){ + a->length_W = BIGINT_CEIL(length_B) / sizeof(bigint_word_t); a->wordv = malloc(BIGINT_CEIL(length_B)); if(!a->wordv){ cli_putstr_P(PSTR("\r\nOOM!\r\n")); @@ -608,29 +516,30 @@ void load_fix_rsa(void){ return; } - load_bigint_from_os(pub_key.modulus, MODULUS, sizeof(MODULUS)); - load_bigint_from_os(pub_key.exponent, PUB_EXPONENT, sizeof(PUB_EXPONENT)); + load_bigint_from_os(&pub_key.modulus, MODULUS, sizeof(MODULUS)); + memcpy(&priv_key.modulus, &pub_key.modulus, sizeof(bigint_t)); + load_bigint_from_os(&pub_key.exponent, PUB_EXPONENT, sizeof(PUB_EXPONENT)); priv_key.n = 5; - load_bigint_from_os(priv_key.components[0], P, sizeof(P)); - load_bigint_from_os(priv_key.components[1], Q, sizeof(Q)); - load_bigint_from_os(priv_key.components[2], DP, sizeof(DP)); - load_bigint_from_os(priv_key.components[3], DQ, sizeof(DQ)); - load_bigint_from_os(priv_key.components[4], QINV, sizeof(QINV)); - -// load_priv_conventional(); -// load_priv_crt_mono(); + load_bigint_from_os(&(priv_key.components[0]), P, sizeof(P)); + load_bigint_from_os(&(priv_key.components[1]), Q, sizeof(Q)); + load_bigint_from_os(&(priv_key.components[2]), DP, sizeof(DP)); + load_bigint_from_os(&(priv_key.components[3]), DQ, sizeof(DQ)); + load_bigint_from_os(&(priv_key.components[4]), QINV, sizeof(QINV)); } void quick_test(void){ uint8_t *ciphertext, *plaintext, rc; uint8_t seed[sizeof(SEED)]; uint16_t clen, plen; - ciphertext = malloc(clen = pub_key.modulus->length_B * sizeof(bigint_word_t)); - plaintext = malloc(pub_key.modulus->length_B * sizeof(bigint_word_t)); + if(!keys_allocated){ + load_fix_rsa(); + } + ciphertext = malloc(clen = pub_key.modulus.length_W * sizeof(bigint_word_t)); + plaintext = malloc(pub_key.modulus.length_W * sizeof(bigint_word_t)); memcpy_P(plaintext, MSG, sizeof(MSG)); memcpy_P(seed, SEED, sizeof(SEED)); cli_putstr_P(PSTR("\r\nplaintext:")); - cli_hexdump_block(plaintext, sizeof(MSG), 4, 8); + cli_hexdump_block(plaintext, sizeof(MSG), 4, 16); cli_putstr_P(PSTR("\r\nencrypting: ...")); rc = rsa_encrypt_oaep(ciphertext, &clen, plaintext, sizeof(MSG), &pub_key, NULL, NULL, seed); if(rc){ @@ -681,12 +590,12 @@ void run_seed_test(void){ cli_putstr_P(PSTR("\r\nERROR: OOM!")); return; } - ciph = malloc(bigint_length_B(pub_key.modulus)); + ciph = malloc(bigint_length_B(&pub_key.modulus)); if(!ciph){ cli_putstr_P(PSTR("\r\nERROR: OOM!")); return; } - msg_ = malloc(bigint_length_B(pub_key.modulus) + sizeof(bigint_word_t)); + msg_ = malloc(bigint_length_B(&pub_key.modulus) + sizeof(bigint_word_t)); if(!msg_){ cli_putstr_P(PSTR("\r\nERROR: OOM!")); return; @@ -764,7 +673,7 @@ void test_dump(void){ cli_putstr_P(PSTR("\r\ndumping 0x")); cli_hexdump_rev(&len, 2); cli_putstr_P(PSTR(" byte:")); - cli_hexdump_block(pub_key.modulus->wordv, len, 4, 8); + cli_hexdump_block(pub_key.modulus.wordv, len, 4, 8); } /*****************************************************************************