common: fix for key generated smaller than asked for

ulab-next-nosound
Jay Sorg 9 years ago
parent ac901fd283
commit 0d192aee62

@ -401,6 +401,7 @@ ssl_gen_key_xrdp1(int key_size_in_bits, char *exp, int exp_len,
tui8 *lexp; tui8 *lexp;
int error; int error;
int len; int len;
int diff;
if ((exp_len != 4) || ((mod_len != 64) && (mod_len != 256)) || if ((exp_len != 4) || ((mod_len != 64) && (mod_len != 256)) ||
((pri_len != 64) && (pri_len != 256))) ((pri_len != 64) && (pri_len != 256)))
@ -408,8 +409,9 @@ ssl_gen_key_xrdp1(int key_size_in_bits, char *exp, int exp_len,
return 1; return 1;
} }
lmod = (char *)g_malloc(mod_len, 0); diff = 0;
lpri = (char *)g_malloc(pri_len, 0); lmod = (char *)g_malloc(mod_len, 1);
lpri = (char *)g_malloc(pri_len, 1);
lexp = (tui8 *)exp; lexp = (tui8 *)exp;
my_e = lexp[0]; my_e = lexp[0];
my_e |= lexp[1] << 8; my_e |= lexp[1] << 8;
@ -423,7 +425,8 @@ ssl_gen_key_xrdp1(int key_size_in_bits, char *exp, int exp_len,
if (error == 0) if (error == 0)
{ {
len = BN_num_bytes(my_key->n); len = BN_num_bytes(my_key->n);
error = len != mod_len; error = (len < 1) || (len > mod_len);
diff = mod_len - len;
} }
if (error == 0) if (error == 0)
@ -435,12 +438,13 @@ ssl_gen_key_xrdp1(int key_size_in_bits, char *exp, int exp_len,
if (error == 0) if (error == 0)
{ {
len = BN_num_bytes(my_key->d); len = BN_num_bytes(my_key->d);
error = len != pri_len; error = (len < 1) || (len > pri_len);
diff = pri_len - len;
} }
if (error == 0) if (error == 0)
{ {
BN_bn2bin(my_key->d, (tui8 *)lpri); BN_bn2bin(my_key->d, (tui8 *)(lpri + diff));
ssl_reverse_it(lpri, pri_len); ssl_reverse_it(lpri, pri_len);
} }
@ -471,6 +475,7 @@ ssl_gen_key_xrdp1(int key_size_in_bits, char *exp, int exp_len,
char *lpri; char *lpri;
int error; int error;
int len; int len;
int diff;
if ((exp_len != 4) || ((mod_len != 64) && (mod_len != 256)) || if ((exp_len != 4) || ((mod_len != 64) && (mod_len != 256)) ||
((pri_len != 64) && (pri_len != 256))) ((pri_len != 64) && (pri_len != 256)))
@ -478,9 +483,10 @@ ssl_gen_key_xrdp1(int key_size_in_bits, char *exp, int exp_len,
return 1; return 1;
} }
lexp = (char *)g_malloc(exp_len, 0); diff = 0;
lmod = (char *)g_malloc(mod_len, 0); lexp = (char *)g_malloc(exp_len, 1);
lpri = (char *)g_malloc(pri_len, 0); lmod = (char *)g_malloc(mod_len, 1);
lpri = (char *)g_malloc(pri_len, 1);
g_memcpy(lexp, exp, exp_len); g_memcpy(lexp, exp, exp_len);
ssl_reverse_it(lexp, exp_len); ssl_reverse_it(lexp, exp_len);
my_e = BN_new(); my_e = BN_new();
@ -491,24 +497,26 @@ ssl_gen_key_xrdp1(int key_size_in_bits, char *exp, int exp_len,
if (error == 0) if (error == 0)
{ {
len = BN_num_bytes(my_key->n); len = BN_num_bytes(my_key->n);
error = len != mod_len; error = (len < 1) || (len > mod_len);
diff = mod_len - len;
} }
if (error == 0) if (error == 0)
{ {
BN_bn2bin(my_key->n, (tui8 *)lmod); BN_bn2bin(my_key->n, (tui8 *)(lmod + diff));
ssl_reverse_it(lmod, mod_len); ssl_reverse_it(lmod, mod_len);
} }
if (error == 0) if (error == 0)
{ {
len = BN_num_bytes(my_key->d); len = BN_num_bytes(my_key->d);
error = len != pri_len; error = (len < 1) || (len > pri_len);
diff = pri_len - len;
} }
if (error == 0) if (error == 0)
{ {
BN_bn2bin(my_key->d, (tui8 *)lpri); BN_bn2bin(my_key->d, (tui8 *)(lpri + diff));
ssl_reverse_it(lpri, pri_len); ssl_reverse_it(lpri, pri_len);
} }

Loading…
Cancel
Save