[openssl-users] M_ASN1_D2I_* replacement in OpenSSL 1.1.0

Dr. Stephen Henson steve at openssl.org
Fri Sep 9 11:44:46 UTC 2016


On Fri, Sep 09, 2016, Aleksandr Konstantinov wrote:

> Hello,
> 
> Thanks for your answer. Here is one of d2i functions simplified:
> 
> MYEXT * d2i_MYEXT(MYEXT ** myext, unsigned char ** pp, long length) {
>   M_ASN1_D2I_vars(myext, MYEXT *, MYEXT_new);
>   M_ASN1_D2I_Init();
>   M_ASN1_D2I_start_sequence();
>   M_ASN1_D2I_get_EXP_opt(ret->intmember, d2i_ASN1_INTEGER, 1);
>   M_ASN1_D2I_get_opt(ret->intmember, d2i_ASN1_INTEGER, V_ASN1_INTEGER);
>   M_ASN1_D2I_Finish(myext, MYEXT_free, ASN1_F_D2I_MYEXT);
> }
> 
> 

Presumably the two fields aren't the same? I'll call one intmember2 for
this example.

The above would translate to something like:

ASN1_SEQUENCE(MYEXT) = {
	ASN1_EXP_OPT(MYEXT, intmember, ASN1_INTEGER, 1),
	ASN1_OPT(MYEXT, intmember2, ASN1_INTEGER)
} ASN1_SEQUENCE_END(MYEXT)

IMPLEMENT_ASN1_FUNCTIONS(MYEXT)

Then you include:

DECLARE_ASN1_FUNCTIONS(MYEXT)

in a header file.

That generates four functions MYEXT_new(), MYEXT_free(), d2i_MYEXT() and 
i2d_MYEXT().

Steve.
--
Dr Stephen N. Henson. OpenSSL project core developer.
Commercial tech support now available see: http://www.openssl.org


More information about the openssl-users mailing list