ASN1_INTEGER to ASN1_STRING

Я использую openssl для получения данных о сертификате x509. Есть ли способ преобразовать ASN1_INTEGER в ASN1_STRING, который можно легко преобразовать в массив символов? Есть ли способ преобразовать его в любой другой удобочитаемый формат?

РЕДАКТИРОВАТЬ: я использую openssl, скомпилированный для iOS, так как у меня есть проект iOS. Вот код, который я использую для извлечения серийного номера из сертификата:

ASN1_INTEGER *serial = X509_get_serialNumber(certificateX509);
long value = ASN1_INTEGER_get(serial);
NSLog(@"Serial %ld", value);

certificateX509является действительным объектом X509, и мне удалось получить из него некоторые другие поля (имя эмитента, срок действия и т. д.)

​​РЕДАКТИРОВАТЬ 2:
В конце концов я пришел к решению, которое может быть не самым простым:

 ASN1_INTEGER *serial = X509_get_serialNumber(certificateX509);
 BIGNUM *bnser = ASN1_INTEGER_to_BN(serial, NULL);
 int n = BN_num_bytes(bnser);
 unsigned char outbuf[n];
 int bin = BN_bn2bin(bnser, outbuf);
 char *hexbuf = (char*) outbuf;

hexBuf содержит символы, значение которых нужно читать как шестнадцатеричное целое, чтобы получить логические значения. Я использую NSMutableString для создания удобочитаемой строки:

NSMutableString *str = [[NSMutableString alloc] init];
for (int i=0; i<n; i++) {
    NSString *temp = [NSString stringWithFormat:@"%.6x", hexbuf[i]];
    [str appendString:[NSString stringWithFormat:@"%@ ", temp]];
}

Если есть более простой способ, мне бы очень хотелось его узнать.

7
задан Maggie 11 March 2012 в 18:18
поделиться