У меня есть открытый ключ RSA base64, который мне нужно использовать для проверки цифровой подписи. Я не понимаю, как инициализировать RSA открытым ключом.openssl инициализирует открытый ключ RSA
Мой код выглядит примерно так:
unsigned char *signature = ""; //signature string
char *original = ""; // my original string
unsigned char sha2HashDigest[SHA256_DIGEST_LENGTH];
SHA256(original, strlen(original), sha2HashDigest);
char *key = "base64encodedKey";
RSA *r = RSA_new();
//SET RSA public key?! how?
int result = RSA_verify(NID_sha256, sha2HashDigest, SHA256_DIGEST_LENGTH,
signature, strlen(signatrue), r);
if (result != 1) // handle error
Примечание: Я делаю это в приложении IOS, но я думаю, что это не имеет никакого отношения к этому вопросу.
ОБНОВЛЕНИЕ: В итоге я использовал EVP, как было предложено vond. Открытый ключ - это файл в формате PEM. Это мой код:
FILE *fp = fopen([keyFilePath UTF8String], "r");
if (!fp) return NO;
EVP_PKEY *pubKey = PEM_read_PUBKEY(fp,NULL,NULL,NULL);
EVP_MD_CTX md_ctx;
EVP_MD_CTX_init(&md_ctx);
EVP_VerifyInit(&md_ctx, EVP_sha256());
EVP_VerifyUpdate (&md_ctx, (unsigned char*)[msgData bytes], [msgData length]);
int err = EVP_VerifyFinal (&md_ctx, (unsigned char*) sigData, (unsigned int)[sigData length], pubKey);
EVP_PKEY_free (pubKey);
Является ли ваш ключ в формате PEM? если это так, [pem (3)] (http://www.openssl.org/docs/crypto/pem.html#) в сочетании с надлежащей памятью BIO, вероятно, вы хотите. – WhozCraig
это просто base64 строка. Я могу сделать из него файл pem, но разве это не лишнее осложнение? – Maggie