OpenSSL Извлечь encryptedKeyPackage из сертификата x509
Я очень новичок в OpenSSL (использую его буквально два дня). Я использую OpenSSL версии 1.0.1 и пытаюсь реализовать функции OpenSSL для извлечения определенного OID x509 из пакета подписанных данных ASN.1 (в кодировке DER) (в частности, OID - 2.16.840.1.101.2).1.2.78.2, id-ct-KP-encryptedKeyPkg). На данный момент я только пытаюсь получить программу, которая может извлечь эти данные из пакета для любого пакета в кодировке ASN.1. Я могу закодировать сертификат в буфер, используя следующий код:
#include <openssl/x509.h>
int main()
{
/* for brevity, please assume "encrypted" points to a DER-encoded buffer */
char* encrypted = malloc( 3000 );
int sizeOfEncrypted = 3000; // assume this number is correct
BIO* bp = BIO_new( BIO_s_mem() );
ASN1_parse( bp, (unsigned char*) encrypted, (long) encryptedSize, 4 );
BUF_MEM *bptr;
BIO_get_mem_ptr( bp, &bptr );
BIO_set_close( bp, BIO_NOCLOSE );
BIO_free( bp );
return 0;
}
Если я записываю байты буфера, на который указывает "bptr", в файл, я получаю все поля закодированных данных, аналогично выводу:
$ openssl asn1parse -inform DER -in my_pkg.dat -i
Я подтвердил, что данные верны, но теперь, как я уже упоминал, я ищу правильные инструкции OpenSSL для извлечения определенного OID (поэтому вместо X509_get_version() это будет что-то вроде X509_get_encryptedKeyPkg(), по сути, для конкретный OID). Как я могу это сделать? Я могу написать код, который просто ищет OID в сертификате и потенциально может анализировать данные, которые мне нужны, но я почти уверен / надеюсь, что OpenSSL уже имеет инструменты для этого и более надежно. Еще раз, я новичок в OpenSSL, поэтому я стараюсь как можно лучше найти решение в Интернете, но, возможно, я не использую правильную формулировку. Пожалуйста, дайте мне знать, если вы можете мне помочь. Спасибо!