diff --git a/src/key_mod/ecryptfs_key_mod_openssl.c b/src/key_mod/ecryptfs_key_mod_openssl.c index 56ebe2d..3959974 100644 --- a/src/key_mod/ecryptfs_key_mod_openssl.c +++ b/src/key_mod/ecryptfs_key_mod_openssl.c @@ -141,6 +141,7 @@ ecryptfs_openssl_destroy_subgraph_ctx(struct ecryptfs_subgraph_ctx *ctx) static int ecryptfs_openssl_generate_signature(char *sig, RSA *key) { int len, nbits, ebits, i; + const BIGNUM *n, *e; int nbytes, ebytes; unsigned char *hash; unsigned char *data = NULL; @@ -152,11 +153,14 @@ static int ecryptfs_openssl_generate_signature(char *sig, RSA *key) rc = -ENOMEM; goto out; } - nbits = BN_num_bits(key->n); + + RSA_get0_key(key, &n, &e, NULL); + + nbits = BN_num_bits(n); nbytes = nbits / 8; if (nbits % 8) nbytes++; - ebits = BN_num_bits(key->e); + ebits = BN_num_bits(e); ebytes = ebits / 8; if (ebits % 8) ebytes++; @@ -179,11 +183,11 @@ static int ecryptfs_openssl_generate_signature(char *sig, RSA *key) data[i++] = '\02'; data[i++] = (nbits >> 8); data[i++] = nbits; - BN_bn2bin(key->n, &(data[i])); + BN_bn2bin(n, &(data[i])); i += nbytes; data[i++] = (ebits >> 8); data[i++] = ebits; - BN_bn2bin(key->e, &(data[i])); + BN_bn2bin(e, &(data[i])); i += ebytes; SHA1(data, len + 3, hash); to_hex(sig, (char *)hash, ECRYPTFS_SIG_SIZE); @@ -278,7 +282,7 @@ static int ecryptfs_openssl_read_key(RSA **rsa, unsigned char *blob) BIO *in = NULL; int rc; - CRYPTO_malloc_init(); + OPENSSL_malloc_init(); ERR_load_crypto_strings(); OpenSSL_add_all_algorithms(); ENGINE_load_builtin_engines();