58 lines
1.2 KiB
Text
58 lines
1.2 KiB
Text
Index: rtunes/cipher.c
|
|
--- rtunes/cipher.c.orig
|
|
+++ rtunes/cipher.c
|
|
@@ -93,6 +93,7 @@ unsigned char *
|
|
cipher_rsa_encrypt_aeskey(unsigned char *aeskey)
|
|
{
|
|
RSA *key;
|
|
+ BIGNUM *rsa_n = NULL, *rsa_e = NULL;
|
|
unsigned char *to = NULL;
|
|
unsigned char n_bin[256], e_bin[3];
|
|
|
|
@@ -121,22 +122,35 @@ cipher_rsa_encrypt_aeskey(unsigned char *aeskey)
|
|
return (NULL);
|
|
|
|
/* initialize RSA public key */
|
|
- key = RSA_new();
|
|
- key->n = BN_bin2bn(n_bin, 256, key->n);;
|
|
- key->e = BN_bin2bn(e_bin, 3, key->e);
|
|
- key->d = NULL;
|
|
- key->p = NULL;
|
|
- key->q = NULL;
|
|
- key->dmp1 = NULL;
|
|
- key->dmq1 = NULL;
|
|
- key->iqmp = NULL;
|
|
+ if ((key = RSA_new()) == NULL)
|
|
+ return (NULL);
|
|
|
|
+ rsa_n = BN_bin2bn(n_bin, 256, NULL);
|
|
+ rsa_e = BN_bin2bn(e_bin, 3, NULL);
|
|
+ if (rsa_n == NULL || rsa_e == NULL)
|
|
+ goto err;
|
|
+
|
|
+ if (!RSA_set0_key(key, rsa_n, rsa_e, NULL))
|
|
+ goto err;
|
|
+ rsa_n = NULL;
|
|
+ rsa_e = NULL;
|
|
+
|
|
/* RSA encrypt */
|
|
- to = malloc(256);
|
|
+ if ((to = malloc(256)) == NULL)
|
|
+ goto err;
|
|
if (RSA_public_encrypt(16, aeskey, to, key, RSA_PKCS1_OAEP_PADDING) < 1)
|
|
- return (NULL);
|
|
+ goto err;
|
|
|
|
+ RSA_free(key);
|
|
+
|
|
return (to);
|
|
+
|
|
+err:
|
|
+ RSA_free(key);
|
|
+ BN_free(rsa_n);
|
|
+ BN_free(rsa_e);
|
|
+ free(to);
|
|
+ return (NULL);
|
|
}
|
|
|
|
/*
|