Merge branch 'master' of github.com:cyassl/cyassl
This commit is contained in:
commit
7ee09ea23c
@ -6,7 +6,7 @@
|
||||
#
|
||||
#
|
||||
|
||||
AC_INIT([cyassl],[2.1.1],[http://www.yassl.com])
|
||||
AC_INIT([cyassl],[2.1.2],[http://www.yassl.com])
|
||||
|
||||
AC_CONFIG_AUX_DIR(config)
|
||||
|
||||
|
@ -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 */
|
||||
|
||||
/* 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)
|
||||
|
||||
/* c = a * a (mod b) */
|
||||
@ -1941,14 +1986,6 @@ int mp_montgomery_calc_normalization(mp_int *a, mp_int *b)
|
||||
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 */
|
||||
|
||||
|
||||
@ -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_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_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)
|
||||
{
|
||||
(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)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
/* fast math conversion */
|
||||
int mp_iszero(mp_int* a)
|
||||
{
|
||||
return fp_iszero(a);
|
||||
}
|
||||
|
||||
/* fast math conversion */
|
||||
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);
|
||||
}
|
||||
|
||||
/* fast math conversion */
|
||||
int mp_isodd(mp_int* a)
|
||||
{
|
||||
return fp_isodd(a);
|
||||
}
|
||||
|
||||
|
||||
int mp_div_2(fp_int * a, fp_int * 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_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
|
||||
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_sqr(fp_int *A, fp_int *B);
|
||||
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_isodd(mp_int* a);
|
||||
int mp_div_2(fp_int * a, fp_int * b);
|
||||
int mp_init_copy(fp_int * a, fp_int * b);
|
||||
#endif
|
||||
|
||||
#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_montgomery_calc_normalization(mp_int *a, mp_int *b);
|
||||
#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_gcd(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);
|
||||
#endif /* CYASSL_KEY_GEN */
|
||||
|
||||
|
@ -27,6 +27,8 @@ struct CYASSL_RSA {
|
||||
CYASSL_BIGNUM* dmq1; /* dQ */
|
||||
CYASSL_BIGNUM* iqmp; /* u */
|
||||
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");
|
||||
|
||||
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");
|
||||
|
||||
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");
|
||||
|
||||
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");
|
||||
|
||||
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");
|
||||
|
||||
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");
|
||||
|
||||
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");
|
||||
|
||||
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* ret;
|
||||
|
||||
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->d = NULL;
|
||||
rsa->p = NULL;
|
||||
rsa->q = NULL;
|
||||
rsa->dmp1 = NULL;
|
||||
rsa->dmq1 = NULL;
|
||||
rsa->iqmp = 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);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
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,
|
||||
void* cb)
|
||||
{
|
||||
RNG rng;
|
||||
|
||||
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;
|
||||
#endif
|
||||
|
||||
if (SetRsaExternal(rsa) < 0) {
|
||||
CYASSL_MSG("SetRsaExternal failed");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 1; /* success */
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user