diff --git a/wolfcrypt/src/tfm.c b/wolfcrypt/src/tfm.c index 021928d6e..c45fa6dee 100755 --- a/wolfcrypt/src/tfm.c +++ b/wolfcrypt/src/tfm.c @@ -1057,7 +1057,8 @@ static int _fp_exptmod(fp_int * G, fp_int * X, fp_int * P, fp_int * Y) } /* init M array */ - XMEMSET(M, 0, sizeof(M)); + for(x = 0; x < (int)(sizeof(M)/sizeof(fp_int)); x++) + fp_init(&M[x]); /* now setup montgomery */ if ((err = fp_montgomery_setup (P, &mp)) != FP_OKAY) { @@ -1456,6 +1457,10 @@ int fp_cmp(fp_int *a, fp_int *b) /* compare against a single digit */ int fp_cmp_d(fp_int *a, fp_digit b) { + /* special case for zero*/ + if (a->used == 0 && b == 0) + return FP_EQ; + /* compare based on sign */ if ((b && a->used == 0) || a->sign == FP_NEG) { return FP_LT; @@ -2156,9 +2161,10 @@ int mp_div_2d(fp_int* a, int b, fp_int* c, fp_int* d) #ifdef ALT_ECC_SIZE void fp_copy(fp_int *a, fp_int* b) { - if (a != b) { + if (a != b && b->size >= a->used) { b->used = a->used; b->sign = a->sign; + XMEMCPY(b->dp, a->dp, a->used * sizeof(fp_digit)); } }