Objective-C con OpenSSL: no se puede configurar la key RSA

Estoy intentando utilizar agregar encriptación RSA a una aplicación usando OpenSSL, pero no puedo get un certificate para cargar. En mi aplicación, un certificate de key pública se distribuirá desde un server y tengo que tomar esa key y usarla para descifrar contenido de los códigos de barras encriptados que mi aplicación escaneará.

La razón por la que estoy eligiendo OpenSSL en la biblioteca de security es que también necesito la validation de ECDSA, que actualmente no es compatible de forma nativa.

He probado numerosos methods para que la key se cargue. El método OpenSSL PEM_read_RSA_PUBKEY requiere un puntero de file. Sin embargo, cuando ejecuto el código siguiente, se bloquea con EXC_BAD_ACCESS tan pronto como bash acceder a la key.

 NSString * path = [[NSBundle mainBundle] pathForResource: @"public" ofType: @"pem"]; FILE *f = fopen([path cStringUsingEncoding:1],"r"); if (f == NULL) NSLog(@"%@", [path stringByAppendingString:@" not found"]); RSA *rsa = PEM_read_RSA_PUBKEY(f,NULL,NULL,NULL); fclose(f); NSLog (@"%d KeyCheck", RSA_check_key(rsa)); 

Tengo los siguientes encabezados incluidos de la biblioteca OpenSSL

 #include <openssl/opensslv.h> #include <openssl/crypto.h> #include <openssl/rsa.h> #include <openssl/pem.h> 

Tengo otros methods OpenSSL como MD5, encoding / deencoding Base64, SHA1 y el código ECDSA funciona bien, ¡está pasando el certificate RSA que me dejó perplejo!

El file de key public.pem contiene esta key:

 -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+ynZ7EvJ0F+IoGmlme/j/MpH4 7BxrIuDTJCOS99j82IL3Ww9Ubm28yOMHYPdi23WPDhR80ugaBWAnmqUZWvYKjqd4 Z4D0sJ0NVW3DDgZ4gS57zFqlvGgdVhzaVimfs7qDxIJ1o8GMuXWseZV2ZpmIjdnF ZBol5zZTqNfk89RNnQIDAQAB -----END PUBLIC KEY----- 

Su progtwig para leer la key pública de RSA está bien.

El problema es con

 RSA_check_key 

Lea aquí la key RSA_check_key.

No funciona en key pública. Necesita key privada para esta function. Es por eso que se está estrellando, ya que tiene su key privada. Disculpa las molestias debidas a las respuestas anteriores.

http://www.openssl.org/docs/crypto/RSA_check_key.html