softpedia para descargar c openssl

c - para - openssl linux



Error: "uso no vĂ¡lido del tipo incompleto ''RSA{aka struct rsa_st}" en OpenSSL 1.1.0 (2)

#if OPENSSL_VERSION_NUMBER < 0x10100005L static void RSA_get0_key(const RSA *r, const BIGNUM **n, const BIGNUM **e, const BIGNUM **d, const BIGNUM **p, const BIGNUM **q) { if(n != NULL) *n = r->n; if(e != NULL) *e = r->e; if(d != NULL) *d = r->d; if(p != NULL) *p = r->p; if(q != NULL) *q = r->q; } #endif const BIGNUM *bn_p; const BIGNUM *bn_q; RSA_get0_key(key, NULL, NULL, NULL, &bn_p, &bn_q); /* if( (prv->p==0 || prv->q==0) ) { */ if( (prv_p==0 || prv_q==0) ) {

Tengo un código antiguo que se escribió para vincular con una versión anterior de openssl. Parte de este código carga una clave de un archivo PEM e intenta comprender si esta clave es privada o pública, utilizando el siguiente código:

if( (prv->p==0 || prv->q==0) ) { // This is not a private key! throw error("No private key for decryption"); }

Con la última versión de openssl, esto (justificadamente) no compila:

crypto.cpp: In function ‘key* decrypt_header(file_t, RSA*)’: crypto.cpp:158:13: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ if( (prv->p==0 || prv->q==0) ) { ^~

Entiendo que el acceso directo a los miembros privados de la estructura fue reemplazado por una función, pero estoy teniendo dificultades para determinar qué función es esa.


crypto.cpp:158:13: error: invalid use of incomplete type ‘RSA {aka struct rsa_st}’ if( (prv->p==0 || prv->q==0) ) { ^~

Como ya sabe, OpenSSL 1.1.0 cambió la visibilidad de muchos miembros de estructura. Ya no puede acceder a los miembros directamente. En su lugar, debe usar las funciones getter y setter.

Pruebe RSA_get0_factors . get0 significa que los recuentos de referencia no se incrementan. No los BN_free .

void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q);

Si el código admite varias versiones de OpenSSL, necesitará una protección porque RSA_get0_factors es para OpenSSL 1.1.0 y superior. Tal vez algo como lo siguiente. Consulte también la página de manual OPENSSL_VERSION_NUMBER .

#include <openssl/opensslv.h> #if OPENSSL_VERSION_NUMBER < 0x10100000L /* OpenSSL 1.0.2 and below (old code) */ #else /* OpenSSL 1.1.0 and above (new code) */ #endif