mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-29 18:27:29 +02:00
add BN_init, working with tfm, only.
This commit is contained in:
22
src/ssl.c
22
src/ssl.c
@ -22711,20 +22711,28 @@ WOLFSSL_BIGNUM* wolfSSL_BN_new(void)
|
||||
|
||||
WOLFSSL_MSG("wolfSSL_BN_new");
|
||||
|
||||
#if !defined(USE_FAST_MATH) || defined(HAVE_WOLF_BIGINT)
|
||||
mpi = (mp_int*) XMALLOC(sizeof(mp_int), NULL, DYNAMIC_TYPE_BIGINT);
|
||||
if (mpi == NULL) {
|
||||
WOLFSSL_MSG("wolfSSL_BN_new malloc mpi failure");
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
external = (WOLFSSL_BIGNUM*) XMALLOC(sizeof(WOLFSSL_BIGNUM), NULL,
|
||||
DYNAMIC_TYPE_BIGINT);
|
||||
if (external == NULL) {
|
||||
WOLFSSL_MSG("wolfSSL_BN_new malloc WOLFSSL_BIGNUM failure");
|
||||
#if !defined(USE_FAST_MATH) || defined(HAVE_WOLF_BIGINT)
|
||||
XFREE(mpi, NULL, DYNAMIC_TYPE_BIGINT);
|
||||
#endif
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#if defined(USE_FAST_MATH) && !defined(HAVE_WOLF_BIGINT)
|
||||
mpi = &external->fp;
|
||||
#endif
|
||||
|
||||
InitwolfSSL_BigNum(external);
|
||||
if (mp_init(mpi) != MP_OKAY) {
|
||||
wolfSSL_BN_free(external);
|
||||
@ -22735,6 +22743,18 @@ WOLFSSL_BIGNUM* wolfSSL_BN_new(void)
|
||||
return external;
|
||||
}
|
||||
|
||||
#if defined(USE_FAST_MATH) && !defined(HAVE_WOLF_BIGINT)
|
||||
/* This function works without BN_free only with TFM */
|
||||
void wolfSSL_BN_init(WOLFSSL_BIGNUM* bn)
|
||||
{
|
||||
if(bn == NULL)return;
|
||||
WOLFSSL_MSG("wolfSSL_BN_init");
|
||||
InitwolfSSL_BigNum(bn);
|
||||
if (mp_init(&bn->fp) != MP_OKAY)
|
||||
return;
|
||||
bn->internal = (void *)&bn->fp;
|
||||
}
|
||||
#endif
|
||||
|
||||
void wolfSSL_BN_free(WOLFSSL_BIGNUM* bn)
|
||||
{
|
||||
@ -22744,7 +22764,9 @@ void wolfSSL_BN_free(WOLFSSL_BIGNUM* bn)
|
||||
mp_int* bni = (mp_int*)bn->internal;
|
||||
mp_forcezero(bni);
|
||||
mp_free(bni);
|
||||
#if !defined(USE_FAST_MATH) || defined(HAVE_WOLF_BIGINT)
|
||||
XFREE(bn->internal, NULL, DYNAMIC_TYPE_BIGINT);
|
||||
#endif
|
||||
bn->internal = NULL;
|
||||
}
|
||||
XFREE(bn, NULL, DYNAMIC_TYPE_BIGINT);
|
||||
|
45
tests/api.c
45
tests/api.c
@ -18951,6 +18951,51 @@ static void test_wolfSSL_BN(void)
|
||||
BN_free(b);
|
||||
BN_free(c);
|
||||
|
||||
#if defined(USE_FAST_MATH) && !defined(HAVE_WOLF_BIGINT)
|
||||
{
|
||||
BIGNUM *ap;
|
||||
BIGNUM bv;
|
||||
BIGNUM cv;
|
||||
BIGNUM dv;
|
||||
|
||||
AssertNotNull(ap = BN_new());
|
||||
BN_init(&bv);
|
||||
BN_init(&cv);
|
||||
BN_init(&dv);
|
||||
|
||||
value[0] = 0x3;
|
||||
AssertNotNull(BN_bin2bn(value, sizeof(value), ap));
|
||||
|
||||
value[0] = 0x02;
|
||||
AssertNotNull(BN_bin2bn(value, sizeof(value), &bv));
|
||||
|
||||
value[0] = 0x05;
|
||||
AssertNotNull(BN_bin2bn(value, sizeof(value), &cv));
|
||||
|
||||
/* a^b mod c = */
|
||||
AssertIntEQ(BN_mod_exp(&dv, NULL, &bv, &cv, NULL), WOLFSSL_FAILURE);
|
||||
AssertIntEQ(BN_mod_exp(&dv, ap, &bv, &cv, NULL), WOLFSSL_SUCCESS);
|
||||
|
||||
/* check result 3^2 mod 5 */
|
||||
value[0] = 0;
|
||||
printf("BN_bn2bin = %d\n", BN_bn2bin(&dv, value));
|
||||
AssertIntEQ(BN_bn2bin(&dv, value), WOLFSSL_SUCCESS);
|
||||
AssertIntEQ(BN_bn2bin(&dv, value), SSL_SUCCESS);
|
||||
AssertIntEQ((int)(value[0]), 4);
|
||||
|
||||
/* a*b mod c = */
|
||||
AssertIntEQ(BN_mod_mul(&dv, NULL, &bv, &cv, NULL), SSL_FAILURE);
|
||||
AssertIntEQ(BN_mod_mul(&dv, ap, &bv, &cv, NULL), SSL_SUCCESS);
|
||||
|
||||
/* check result 3*2 mod 5 */
|
||||
value[0] = 0;
|
||||
AssertIntEQ(BN_bn2bin(&dv, value), SSL_SUCCESS);
|
||||
AssertIntEQ((int)(value[0]), 1);
|
||||
|
||||
BN_free(ap);
|
||||
}
|
||||
#endif
|
||||
|
||||
printf(resultFmt, passed);
|
||||
#endif /* defined(OPENSSL_EXTRA) && !defined(NO_ASN) */
|
||||
}
|
||||
|
@ -37,9 +37,13 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct WOLFSSL_BIGNUM {
|
||||
int neg; /* openssh deference */
|
||||
void* internal; /* our big num */
|
||||
typedef struct WOLFSSL_BIGNUM
|
||||
{
|
||||
int neg; /* openssh deference */
|
||||
void *internal; /* our big num */
|
||||
#if defined(USE_FAST_MATH) && !defined(HAVE_WOLF_BIGINT)
|
||||
fp_int fp;
|
||||
#endif
|
||||
} WOLFSSL_BIGNUM;
|
||||
|
||||
|
||||
@ -53,6 +57,9 @@ WOLFSSL_API void wolfSSL_BN_CTX_init(WOLFSSL_BN_CTX*);
|
||||
WOLFSSL_API void wolfSSL_BN_CTX_free(WOLFSSL_BN_CTX*);
|
||||
|
||||
WOLFSSL_API WOLFSSL_BIGNUM* wolfSSL_BN_new(void);
|
||||
#if defined(USE_FAST_MATH) && !defined(HAVE_WOLF_BIGINT)
|
||||
WOLFSSL_API void wolfSSL_BN_init(WOLFSSL_BIGNUM *);
|
||||
#endif
|
||||
WOLFSSL_API void wolfSSL_BN_free(WOLFSSL_BIGNUM*);
|
||||
WOLFSSL_API void wolfSSL_BN_clear_free(WOLFSSL_BIGNUM*);
|
||||
|
||||
@ -126,6 +133,7 @@ typedef WOLFSSL_BN_GENCB BN_GENCB;
|
||||
#define BN_CTX_free wolfSSL_BN_CTX_free
|
||||
|
||||
#define BN_new wolfSSL_BN_new
|
||||
#define BN_init wolfSSL_BN_init
|
||||
#define BN_free wolfSSL_BN_free
|
||||
#define BN_clear_free wolfSSL_BN_clear_free
|
||||
|
||||
|
Reference in New Issue
Block a user