Cómo obtener valor dentro/desde ASN1_ENUMERADO sin abrir SSL en C++

No encontré documentación en la página de openssl sobre cómo trabajar con ASN1_ENUMERADO.

Usando BERViewer para visualizar la estructura:
enter image description here

Entonces usé:

ASN1_SEQUENCE_ANY *asn1SequenceAny = sk_ASN1_TYPE_new_null();
asn1SequenceAny = d2i_ASN1_SEQUENCE_ANY(&asn1SequenceAny, (const unsigned char**)&data,len);

ASN1_TYPE *asn1Type = NULL;
asn1Type = sk_ASN1_TYPE_pop(asn1SequenceAny);
if(asn1Type->type == V_ASN1_ENUMERATED)
{
    asn1Type->value.enumerated->data; // How to get sequence inside [0] ?
}

Los datos enumerados en el disco "asn1Type->value.enumerated->data" se ven así:
enter image description here

Cómo obtener el ASN1_SEQUENCE_ANY de [0]:

SEQUENCE
     |__SEQUENCE
     |__SEQUENCE

Intenté: ASN1_ENUMERATED_get, return -1. ¿Por qué no cero?

Los artículos son muy bienvenidos.

preguntado el 12 de junio de 12 a las 15:06

1 Respuestas

OpenSSL proporciona una serie de funciones para decodificar estos mensajes. Debe saber cuál fue la función correspondiente que lo codificó, porque las rutinas de decodificación también analizan la salida para asegurarse de que el mensaje decodificado coincida con el tipo esperado implícito en el método de decodificación que llamó. Parece que quieres:

d2i_ASN1_OBJECT (3ssl) - ASN1 OBJECT IDENTIFIER functions

Pero si eso no es correcto, puede buscar en la documentación de OpenSSL para d2i, encontrará muchas funciones para probar.

Si descarga el Código fuente de OpenSSL, después de desempacarlo, mire dentro del apps subdirectorio, y lea a través del asn1pars.c Archivo. O puedes seguir este enlace para verlo en línea. ¡Espero que esto ayude!

Respondido el 12 de junio de 12 a las 21:06

@Cobaia: agregó más información. Saludos - jxh

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.