20#include <openssl/rand.h>
21#include <openssl/bio.h>
22#include <openssl/pem.h>
23#include <openssl/err.h>
37#error HAVE_OPENSSL not defines, this file should not be included
40static inline const BIGNUM*
41rsa_get_n(
const RSA *rsa)
44 const BIGNUM *n, *e, *d;
45 RSA_get0_key(rsa, &n, &e, &d);
53tds5_rsa_encrypt(
const void *key,
size_t key_len,
const void *nonce,
size_t nonce_len,
const char *pwd,
size_t *em_size)
58 uint8_t *message = NULL;
59 size_t message_len, pwd_len;
64 keybio = BIO_new_mem_buf((
void*) key, key_len);
68 rsa = PEM_read_bio_RSAPublicKey(keybio, &rsa, NULL, NULL);
72 pwd_len = strlen(pwd);
73 message_len = nonce_len + pwd_len;
74 message = tds_new(uint8_t, message_len);
77 memcpy(message, nonce, nonce_len);
78 memcpy(message + nonce_len, pwd, pwd_len);
80 em = tds_new(uint8_t, BN_num_bytes(rsa_get_n(rsa)));
84 result = RSA_public_encrypt(message_len, message, em, rsa, RSA_PKCS1_OAEP_PADDING);