mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-08-02 20:24:39 +02:00
BN help
This commit is contained in:
@@ -1800,6 +1800,15 @@ void fp_reverse (unsigned char *s, int len)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* c = a - b */
|
||||||
|
void fp_sub_d(fp_int *a, fp_digit b, fp_int *c)
|
||||||
|
{
|
||||||
|
fp_int tmp;
|
||||||
|
fp_set(&tmp, b);
|
||||||
|
fp_sub(a, &tmp, c);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* CyaSSL callers from normal lib */
|
/* CyaSSL callers from normal lib */
|
||||||
|
|
||||||
/* init a new mp_int */
|
/* init a new mp_int */
|
||||||
@@ -1917,6 +1926,42 @@ int mp_read_unsigned_bin (mp_int * a, const unsigned char *b, int c)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int mp_sub_d(fp_int *a, fp_digit b, fp_int *c)
|
||||||
|
{
|
||||||
|
fp_sub_d(a, b, c);
|
||||||
|
return MP_OKAY;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* fast math conversion */
|
||||||
|
int mp_copy(fp_int* a, fp_int* b)
|
||||||
|
{
|
||||||
|
fp_copy(a, b);
|
||||||
|
return MP_OKAY;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* fast math conversion */
|
||||||
|
int mp_isodd(mp_int* a)
|
||||||
|
{
|
||||||
|
return fp_isodd(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* fast math conversion */
|
||||||
|
int mp_iszero(mp_int* a)
|
||||||
|
{
|
||||||
|
return fp_iszero(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* fast math conversion */
|
||||||
|
int mp_count_bits (mp_int* a)
|
||||||
|
{
|
||||||
|
return fp_count_bits(a);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#if defined(CYASSL_KEY_GEN) || defined (HAVE_ECC)
|
#if defined(CYASSL_KEY_GEN) || defined (HAVE_ECC)
|
||||||
|
|
||||||
/* c = a * a (mod b) */
|
/* c = a * a (mod b) */
|
||||||
@@ -1941,14 +1986,6 @@ int mp_montgomery_calc_normalization(mp_int *a, mp_int *b)
|
|||||||
return MP_OKAY;
|
return MP_OKAY;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* fast math conversion */
|
|
||||||
int mp_copy(fp_int* a, fp_int* b)
|
|
||||||
{
|
|
||||||
fp_copy(a, b);
|
|
||||||
return MP_OKAY;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* CYASSL_KEYGEN || HAVE_ECC */
|
#endif /* CYASSL_KEYGEN || HAVE_ECC */
|
||||||
|
|
||||||
|
|
||||||
@@ -1956,7 +1993,6 @@ int mp_copy(fp_int* a, fp_int* b)
|
|||||||
|
|
||||||
void fp_gcd(fp_int *a, fp_int *b, fp_int *c);
|
void fp_gcd(fp_int *a, fp_int *b, fp_int *c);
|
||||||
void fp_lcm(fp_int *a, fp_int *b, fp_int *c);
|
void fp_lcm(fp_int *a, fp_int *b, fp_int *c);
|
||||||
void fp_sub_d(fp_int *a, fp_digit b, fp_int *c);
|
|
||||||
int fp_isprime(fp_int *a);
|
int fp_isprime(fp_int *a);
|
||||||
int fp_cnt_lsb(fp_int *a);
|
int fp_cnt_lsb(fp_int *a);
|
||||||
|
|
||||||
@@ -1982,13 +2018,6 @@ int mp_lcm(fp_int *a, fp_int *b, fp_int *c)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int mp_sub_d(fp_int *a, fp_digit b, fp_int *c)
|
|
||||||
{
|
|
||||||
fp_sub_d(a, b, c);
|
|
||||||
return MP_OKAY;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int mp_prime_is_prime(mp_int* a, int t, int* result)
|
int mp_prime_is_prime(mp_int* a, int t, int* result)
|
||||||
{
|
{
|
||||||
(void)t;
|
(void)t;
|
||||||
@@ -1998,15 +2027,6 @@ int mp_prime_is_prime(mp_int* a, int t, int* result)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* c = a - b */
|
|
||||||
void fp_sub_d(fp_int *a, fp_digit b, fp_int *c)
|
|
||||||
{
|
|
||||||
fp_int tmp;
|
|
||||||
fp_set(&tmp, b);
|
|
||||||
fp_sub(a, &tmp, c);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int s_is_power_of_two(fp_digit b, int *p)
|
static int s_is_power_of_two(fp_digit b, int *p)
|
||||||
{
|
{
|
||||||
int x;
|
int x;
|
||||||
@@ -2408,12 +2428,6 @@ int mp_read_radix(mp_int *a, const char *str, int radix)
|
|||||||
return fp_read_radix(a, str, radix);
|
return fp_read_radix(a, str, radix);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* fast math conversion */
|
|
||||||
int mp_iszero(mp_int* a)
|
|
||||||
{
|
|
||||||
return fp_iszero(a);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* fast math conversion */
|
/* fast math conversion */
|
||||||
int mp_set(fp_int *a, fp_digit b)
|
int mp_set(fp_int *a, fp_digit b)
|
||||||
{
|
{
|
||||||
@@ -2442,13 +2456,6 @@ int mp_montgomery_setup(fp_int *a, fp_digit *rho)
|
|||||||
return fp_montgomery_setup(a, rho);
|
return fp_montgomery_setup(a, rho);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* fast math conversion */
|
|
||||||
int mp_isodd(mp_int* a)
|
|
||||||
{
|
|
||||||
return fp_isodd(a);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int mp_div_2(fp_int * a, fp_int * b)
|
int mp_div_2(fp_int * a, fp_int * b)
|
||||||
{
|
{
|
||||||
fp_div_2(a, b);
|
fp_div_2(a, b);
|
||||||
|
@@ -645,20 +645,23 @@ int mp_unsigned_bin_size(mp_int * a);
|
|||||||
int mp_read_unsigned_bin (mp_int * a, const unsigned char *b, int c);
|
int mp_read_unsigned_bin (mp_int * a, const unsigned char *b, int c);
|
||||||
int mp_to_unsigned_bin (mp_int * a, unsigned char *b);
|
int mp_to_unsigned_bin (mp_int * a, unsigned char *b);
|
||||||
|
|
||||||
|
int mp_sub_d(fp_int *a, fp_digit b, fp_int *c);
|
||||||
|
int mp_copy(fp_int* a, fp_int* b);
|
||||||
|
int mp_isodd(mp_int* a);
|
||||||
|
int mp_iszero(mp_int* a);
|
||||||
|
int mp_count_bits(mp_int *a);
|
||||||
|
|
||||||
#ifdef HAVE_ECC
|
#ifdef HAVE_ECC
|
||||||
int mp_read_radix(mp_int* a, const char* str, int radix);
|
int mp_read_radix(mp_int* a, const char* str, int radix);
|
||||||
int mp_iszero(mp_int* a);
|
|
||||||
int mp_set(fp_int *a, fp_digit b);
|
int mp_set(fp_int *a, fp_digit b);
|
||||||
int mp_sqr(fp_int *A, fp_int *B);
|
int mp_sqr(fp_int *A, fp_int *B);
|
||||||
int mp_montgomery_reduce(fp_int *a, fp_int *m, fp_digit mp);
|
int mp_montgomery_reduce(fp_int *a, fp_int *m, fp_digit mp);
|
||||||
int mp_montgomery_setup(fp_int *a, fp_digit *rho);
|
int mp_montgomery_setup(fp_int *a, fp_digit *rho);
|
||||||
int mp_isodd(mp_int* a);
|
|
||||||
int mp_div_2(fp_int * a, fp_int * b);
|
int mp_div_2(fp_int * a, fp_int * b);
|
||||||
int mp_init_copy(fp_int * a, fp_int * b);
|
int mp_init_copy(fp_int * a, fp_int * b);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(HAVE_ECC) || defined(CYASSL_KEY_GEN)
|
#if defined(HAVE_ECC) || defined(CYASSL_KEY_GEN)
|
||||||
int mp_copy(fp_int* a, fp_int* b);
|
|
||||||
int mp_sqrmod(mp_int* a, mp_int* b, mp_int* c);
|
int mp_sqrmod(mp_int* a, mp_int* b, mp_int* c);
|
||||||
int mp_montgomery_calc_normalization(mp_int *a, mp_int *b);
|
int mp_montgomery_calc_normalization(mp_int *a, mp_int *b);
|
||||||
#endif
|
#endif
|
||||||
@@ -667,7 +670,6 @@ int mp_to_unsigned_bin (mp_int * a, unsigned char *b);
|
|||||||
int mp_set_int(fp_int *a, fp_digit b);
|
int mp_set_int(fp_int *a, fp_digit b);
|
||||||
int mp_gcd(fp_int *a, fp_int *b, fp_int *c);
|
int mp_gcd(fp_int *a, fp_int *b, fp_int *c);
|
||||||
int mp_lcm(fp_int *a, fp_int *b, fp_int *c);
|
int mp_lcm(fp_int *a, fp_int *b, fp_int *c);
|
||||||
int mp_sub_d(fp_int *a, fp_digit b, fp_int *c);
|
|
||||||
int mp_prime_is_prime(mp_int* a, int t, int* result);
|
int mp_prime_is_prime(mp_int* a, int t, int* result);
|
||||||
#endif /* CYASSL_KEY_GEN */
|
#endif /* CYASSL_KEY_GEN */
|
||||||
|
|
||||||
|
@@ -27,6 +27,8 @@ struct CYASSL_RSA {
|
|||||||
CYASSL_BIGNUM* dmq1; /* dQ */
|
CYASSL_BIGNUM* dmq1; /* dQ */
|
||||||
CYASSL_BIGNUM* iqmp; /* u */
|
CYASSL_BIGNUM* iqmp; /* u */
|
||||||
void* internal; /* our RSA */
|
void* internal; /* our RSA */
|
||||||
|
char inSet; /* internal set from external ? */
|
||||||
|
char exSet; /* external set from internal ? */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
187
src/ssl.c
187
src/ssl.c
@@ -5404,7 +5404,10 @@ int CyaSSL_set_compression(CYASSL* ssl)
|
|||||||
{
|
{
|
||||||
CYASSL_MSG("CyaSSL_BN_num_bytes");
|
CYASSL_MSG("CyaSSL_BN_num_bytes");
|
||||||
|
|
||||||
return -1;
|
if (bn == NULL || bn->internal == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return mp_unsigned_bin_size((mp_int*)bn->internal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -5412,7 +5415,10 @@ int CyaSSL_set_compression(CYASSL* ssl)
|
|||||||
{
|
{
|
||||||
CYASSL_MSG("CyaSSL_BN_num_bits");
|
CYASSL_MSG("CyaSSL_BN_num_bits");
|
||||||
|
|
||||||
return -1;
|
if (bn == NULL || bn->internal == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return mp_count_bits((mp_int*)bn->internal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -5420,7 +5426,10 @@ int CyaSSL_set_compression(CYASSL* ssl)
|
|||||||
{
|
{
|
||||||
CYASSL_MSG("CyaSSL_BN_is_zero");
|
CYASSL_MSG("CyaSSL_BN_is_zero");
|
||||||
|
|
||||||
return -1;
|
if (bn == NULL || bn->internal == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return mp_iszero((mp_int*)bn->internal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -5428,7 +5437,13 @@ int CyaSSL_set_compression(CYASSL* ssl)
|
|||||||
{
|
{
|
||||||
CYASSL_MSG("CyaSSL_BN_is_one");
|
CYASSL_MSG("CyaSSL_BN_is_one");
|
||||||
|
|
||||||
return -1;
|
if (bn == NULL || bn->internal == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (mp_cmp_d((mp_int*)bn->internal, 1) == 0);
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -5436,7 +5451,10 @@ int CyaSSL_set_compression(CYASSL* ssl)
|
|||||||
{
|
{
|
||||||
CYASSL_MSG("CyaSSL_BN_is_odd");
|
CYASSL_MSG("CyaSSL_BN_is_odd");
|
||||||
|
|
||||||
return -1;
|
if (bn == NULL || bn->internal == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return mp_isodd((mp_int*)bn->internal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -5444,7 +5462,10 @@ int CyaSSL_set_compression(CYASSL* ssl)
|
|||||||
{
|
{
|
||||||
CYASSL_MSG("CyaSSL_BN_cmp");
|
CYASSL_MSG("CyaSSL_BN_cmp");
|
||||||
|
|
||||||
return -1;
|
if (a == NULL || a->internal == NULL || b == NULL || b->internal ==NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return mp_cmp((mp_int*)a->internal, (mp_int*)b->internal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -5452,7 +5473,17 @@ int CyaSSL_set_compression(CYASSL* ssl)
|
|||||||
{
|
{
|
||||||
CYASSL_MSG("CyaSSL_BN_bn2bin");
|
CYASSL_MSG("CyaSSL_BN_bn2bin");
|
||||||
|
|
||||||
return -1;
|
if (bn == NULL || bn->internal == NULL) {
|
||||||
|
CYASSL_MSG("NULL bn error");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mp_to_unsigned_bin((mp_int*)bn->internal, r) != MP_OKAY) {
|
||||||
|
CYASSL_MSG("mp_to_unsigned_bin error");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return mp_unsigned_bin_size((mp_int*)bn->internal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -5508,9 +5539,28 @@ int CyaSSL_set_compression(CYASSL* ssl)
|
|||||||
|
|
||||||
CYASSL_BIGNUM* CyaSSL_BN_dup(const CYASSL_BIGNUM* bn)
|
CYASSL_BIGNUM* CyaSSL_BN_dup(const CYASSL_BIGNUM* bn)
|
||||||
{
|
{
|
||||||
|
CYASSL_BIGNUM* ret;
|
||||||
|
|
||||||
CYASSL_MSG("CyaSSL_BN_dup");
|
CYASSL_MSG("CyaSSL_BN_dup");
|
||||||
|
|
||||||
return NULL;
|
if (bn == NULL || bn->internal == NULL) {
|
||||||
|
CYASSL_MSG("bn NULL error");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = CyaSSL_BN_new();
|
||||||
|
if (ret == NULL) {
|
||||||
|
CYASSL_MSG("bn new error");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mp_copy((mp_int*)bn->internal, (mp_int*)ret->internal) != MP_OKAY) {
|
||||||
|
CYASSL_MSG("mp_copy error");
|
||||||
|
CyaSSL_BN_free(ret);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -5624,10 +5674,13 @@ int CyaSSL_set_compression(CYASSL* ssl)
|
|||||||
rsa->e = NULL;
|
rsa->e = NULL;
|
||||||
rsa->d = NULL;
|
rsa->d = NULL;
|
||||||
rsa->p = NULL;
|
rsa->p = NULL;
|
||||||
|
rsa->q = NULL;
|
||||||
rsa->dmp1 = NULL;
|
rsa->dmp1 = NULL;
|
||||||
rsa->dmq1 = NULL;
|
rsa->dmq1 = NULL;
|
||||||
rsa->iqmp = NULL;
|
rsa->iqmp = NULL;
|
||||||
rsa->internal = NULL;
|
rsa->internal = NULL;
|
||||||
|
rsa->inSet = 0;
|
||||||
|
rsa->exSet = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5671,17 +5724,135 @@ int CyaSSL_set_compression(CYASSL* ssl)
|
|||||||
XFREE(rsa->internal, NULL, DYNAMIC_TYPE_RSA);
|
XFREE(rsa->internal, NULL, DYNAMIC_TYPE_RSA);
|
||||||
rsa->internal = NULL;
|
rsa->internal = NULL;
|
||||||
}
|
}
|
||||||
|
CyaSSL_BN_free(rsa->iqmp);
|
||||||
|
CyaSSL_BN_free(rsa->dmq1);
|
||||||
|
CyaSSL_BN_free(rsa->dmp1);
|
||||||
|
CyaSSL_BN_free(rsa->q);
|
||||||
|
CyaSSL_BN_free(rsa->p);
|
||||||
|
CyaSSL_BN_free(rsa->d);
|
||||||
|
CyaSSL_BN_free(rsa->e);
|
||||||
|
CyaSSL_BN_free(rsa->n);
|
||||||
|
InitCyaSSL_Rsa(rsa); /* set back to NULLs for safety */
|
||||||
|
|
||||||
XFREE(rsa, NULL, DYNAMIC_TYPE_RSA);
|
XFREE(rsa, NULL, DYNAMIC_TYPE_RSA);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int SetIndividualRsaExternal(CYASSL_BIGNUM** bn, mp_int* mpi)
|
||||||
|
{
|
||||||
|
CYASSL_MSG("Entering SetIndividualRsaExternal");
|
||||||
|
|
||||||
|
if (mpi == NULL) {
|
||||||
|
CYASSL_MSG("mpi NULL error");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*bn == NULL) {
|
||||||
|
*bn = CyaSSL_BN_new();
|
||||||
|
if (*bn == NULL) {
|
||||||
|
CYASSL_MSG("SetIndividualRsaExternal alloc failed");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mp_copy(mpi, (*bn)->internal) != MP_OKAY) {
|
||||||
|
CYASSL_MSG("mp_copy error");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static int SetRsaExternal(CYASSL_RSA* rsa)
|
||||||
|
{
|
||||||
|
RsaKey* key;
|
||||||
|
CYASSL_MSG("Entering SetRsaExternal");
|
||||||
|
|
||||||
|
if (rsa == NULL || rsa->internal == NULL) {
|
||||||
|
CYASSL_MSG("rsa key NULL error");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
key = (RsaKey*)rsa->internal;
|
||||||
|
|
||||||
|
if (SetIndividualRsaExternal(&rsa->n, &key->n) < 0) {
|
||||||
|
CYASSL_MSG("rsa n key error");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SetIndividualRsaExternal(&rsa->e, &key->e) < 0) {
|
||||||
|
CYASSL_MSG("rsa e key error");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SetIndividualRsaExternal(&rsa->d, &key->d) < 0) {
|
||||||
|
CYASSL_MSG("rsa d key error");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SetIndividualRsaExternal(&rsa->p, &key->p) < 0) {
|
||||||
|
CYASSL_MSG("rsa p key error");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SetIndividualRsaExternal(&rsa->q, &key->q) < 0) {
|
||||||
|
CYASSL_MSG("rsa q key error");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SetIndividualRsaExternal(&rsa->dmp1, &key->dP) < 0) {
|
||||||
|
CYASSL_MSG("rsa dP key error");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SetIndividualRsaExternal(&rsa->dmq1, &key->dQ) < 0) {
|
||||||
|
CYASSL_MSG("rsa dQ key error");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (SetIndividualRsaExternal(&rsa->iqmp, &key->u) < 0) {
|
||||||
|
CYASSL_MSG("rsa u key error");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int CyaSSL_RSA_generate_key_ex(CYASSL_RSA* rsa, int bits, CYASSL_BIGNUM* bn,
|
int CyaSSL_RSA_generate_key_ex(CYASSL_RSA* rsa, int bits, CYASSL_BIGNUM* bn,
|
||||||
void* cb)
|
void* cb)
|
||||||
{
|
{
|
||||||
|
RNG rng;
|
||||||
|
|
||||||
CYASSL_MSG("CyaSSL_RSA_generate_key_ex");
|
CYASSL_MSG("CyaSSL_RSA_generate_key_ex");
|
||||||
|
|
||||||
|
(void)cb;
|
||||||
|
(void)bn;
|
||||||
|
|
||||||
|
if (InitRng(&rng) < 0) {
|
||||||
|
CYASSL_MSG("RNG init failed");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef CYASSL_KEY_GEN
|
||||||
|
if (MakeRsaKey(rsa->internal, bits, 65537, &rng) < 0) {
|
||||||
|
CYASSL_MSG("MakeRsaKey failed");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
CYASSL_MSG("No Key Gen built in");
|
||||||
return -1;
|
return -1;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (SetRsaExternal(rsa) < 0) {
|
||||||
|
CYASSL_MSG("SetRsaExternal failed");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1; /* success */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user