fixed building, but test of ecc still crashes

This commit is contained in:
Steffen Jaeckel 2011-01-18 21:01:24 +01:00 committed by Steffen Jaeckel
parent 8ec7d281d8
commit 45f306eb0b
2 changed files with 15 additions and 13 deletions

View file

@ -726,7 +726,7 @@ void ecc_gen(void)
{
FILE *out;
unsigned char str[512];
void *k, *order, *modulus;
void *k, *order, *modulus, *a;
ecc_point *G, *R;
int x;
@ -734,9 +734,9 @@ void ecc_gen(void)
fprintf(out, "ecc vectors. These are for kG for k=1,3,9,27,...,3**n until k > order of the curve outputs are <k,x,y> triplets\n\n");
G = ltc_ecc_new_point();
R = ltc_ecc_new_point();
mp_init(&k);
mp_init(&order);
mp_init(&modulus);
if (mp_init_multi(&k, &order, &modulus, &a, NULL) != CRYPT_OK) {
return;
}
for (x = 0; ltc_ecc_sets[x].size != 0; x++) {
fprintf(out, "ECC-%d\n", ltc_ecc_sets[x].size*8);
@ -744,12 +744,13 @@ void ecc_gen(void)
mp_read_radix(order, (char *)ltc_ecc_sets[x].order, 16);
mp_read_radix(modulus, (char *)ltc_ecc_sets[x].prime, 16);
mp_read_radix(a, (char *)ltc_ecc_sets[x].A, 16);
mp_read_radix(G->x, (char *)ltc_ecc_sets[x].Gx, 16);
mp_read_radix(G->y, (char *)ltc_ecc_sets[x].Gy, 16);
mp_set(G->z, 1);
while (mp_cmp(k, order) == LTC_MP_LT) {
ltc_mp.ecc_ptmul(k, G, R, modulus, 1);
ltc_mp.ecc_ptmul(k, G, R, modulus, a, 1);
mp_tohex(k, (char*)str); fprintf(out, "%s, ", (char*)str);
mp_tohex(R->x, (char*)str); fprintf(out, "%s, ", (char*)str);
mp_tohex(R->y, (char*)str); fprintf(out, "%s\n", (char*)str);

View file

@ -32,12 +32,12 @@ static int sizes[] = {
#ifdef LTC_ECC_SHAMIR
int ecc_test_shamir(void)
{
void *modulus, *mp, *kA, *kB, *rA, *rB;
void *modulus, *mp, *kA, *kB, *rA, *rB, *a;
ecc_point *G, *A, *B, *C1, *C2;
int x, y, z;
unsigned char buf[ECC_BUF_SIZE];
DO(mp_init_multi(&kA, &kB, &rA, &rB, &modulus, NULL));
DO(mp_init_multi(&kA, &kB, &rA, &rB, &modulus, &a, NULL));
LTC_ARGCHK((G = ltc_ecc_new_point()) != NULL);
LTC_ARGCHK((A = ltc_ecc_new_point()) != NULL);
LTC_ARGCHK((B = ltc_ecc_new_point()) != NULL);
@ -56,6 +56,7 @@ int ecc_test_shamir(void)
DO(mp_read_radix(G->y, ltc_ecc_sets[z].Gy, 16));
DO(mp_set(G->z, 1));
DO(mp_read_radix(modulus, ltc_ecc_sets[z].prime, 16));
DO(mp_read_radix(a, ltc_ecc_sets[z].A, 16));
DO(mp_montgomery_setup(modulus, &mp));
/* do 100 random tests */
@ -67,10 +68,10 @@ int ecc_test_shamir(void)
DO(mp_read_unsigned_bin(rB, buf, sizes[x]));
/* compute rA * G = A */
DO(ltc_mp.ecc_ptmul(rA, G, A, modulus, 1));
DO(ltc_mp.ecc_ptmul(rA, G, A, modulus, a, 1));
/* compute rB * G = B */
DO(ltc_mp.ecc_ptmul(rB, G, B, modulus, 1));
DO(ltc_mp.ecc_ptmul(rB, G, B, modulus, a, 1));
/* pick a random kA, kB */
LTC_ARGCHK(yarrow_read(buf, sizes[x], &yarrow_prng) == sizes[x]);
@ -79,13 +80,13 @@ int ecc_test_shamir(void)
DO(mp_read_unsigned_bin(kB, buf, sizes[x]));
/* now, compute kA*A + kB*B = C1 using the older method */
DO(ltc_mp.ecc_ptmul(kA, A, C1, modulus, 0));
DO(ltc_mp.ecc_ptmul(kB, B, C2, modulus, 0));
DO(ltc_mp.ecc_ptadd(C1, C2, C1, modulus, mp));
DO(ltc_mp.ecc_ptmul(kA, A, C1, modulus, a, 0));
DO(ltc_mp.ecc_ptmul(kB, B, C2, modulus, a, 0));
DO(ltc_mp.ecc_ptadd(C1, C2, C1, modulus, a, mp));
DO(ltc_mp.ecc_map(C1, modulus, mp));
/* now compute using mul2add */
DO(ltc_mp.ecc_mul2add(A, kA, B, kB, C2, modulus));
DO(ltc_mp.ecc_mul2add(A, kA, B, kB, C2, modulus, a));
/* is they the sames? */
if ((mp_cmp(C1->x, C2->x) != LTC_MP_EQ) || (mp_cmp(C1->y, C2->y) != LTC_MP_EQ) || (mp_cmp(C1->z, C2->z) != LTC_MP_EQ)) {