<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">
<div class="">Bonjour,</div>
<div class=""><br class="">
</div>
<div class="">Something like this?</div>
<div class=""><br class="">
</div>
<div class="">/*</div>
<div class=""><br class="">
</div>
<div class="">MyChoice ::= CHOICE {</div>
<div class="">  anInteger INTEGER,</div>
<div class="">  anOctetString OCTET STRING</div>
<div class="">  anASCIIString IA5STRING</div>
<div class="">}</div>
<div class=""><br class="">
</div>
<div class="">MyStruct ::= SEQUENCE {</div>
<div class="">  item1 MyChoice</div>
<div class="">}</div>
<div class=""><br class="">
</div>
<div class="">*/</div>
<div class=""><br class="">
</div>
<div class="">__ File mytypes.h __</div>
<div class=""><br class="">
</div>
<div class="">
<div class="">#include <openssl/asn1.h></div>
<div class=""><br class="">
</div>
<div class="">#define ASN1_OBJECT_dup(x) ASN1_dup_of(ASN1_OBJECT,i2d_ASN1_OBJECT,d2i_ASN1_OBJECT,x)</div>
<div class="">#define DECLARE_ASN1_DUP_FUNCTION(stname) stname * stname##_dup(stname *x);</div>
<div class=""><br class="">
</div>
<div class="">typedef struct {</div>
<div class="">  int type;</div>
<div class="">  union {</div>
<div class="">    ASN1_INTEGER *anInteger;</div>
<div class="">    ASN1_OCTET_STRING *anOctetString;</div>
<div class="">    ASN1_IA5STRING *anASCIIString;</div>
<div class="">  } value;</div>
<div class="">} MYCHOICE;</div>
<div class=""><br class="">
</div>
<div class="">DECLARE_ASN1_FUNCTIONS(MYCHOICE)</div>
<div class="">DECLARE_ASN1_DUP_FUNCTION(MYCHOICE)</div>
<div class="">DECLARE_ASN1_PRINT_FUNCTION(MYCHOICE)</div>
<div class="">#define d2i_MYCHOICE_bio(bp,p) ASN1_d2i_bio_of(MYCHOICE, MYCHOICE_new,d2i_ MYCHOICE,bp,p)</div>
<div class="">#define i2d_MYCHOICE_bio(bp,o) ASN1_i2d_bio_of(MYCHOICE,i2d_ MYCHOICE,bp,o)</div>
<div class="">#define d2i_MYCHOICE_fp(fp,p) ASN1_d2i_fp_of(MYCHOICE, MYCHOICE_new,d2i_ MYCHOICE,fp,p)</div>
<div class="">#define i2d_MYCHOICE_fp(fp,p) ASN1_i2d_fp_of(MYCHOICE,i2d_ MYCHOICE,fp,p)</div>
<div class=""><br class="">
</div>
<div class=""><br class="">
</div>
<div class="">typedef struct {</div>
<div class="">  MYCHOICE *item1;</div>
<div class="">} MYSTRUCT;</div>
<div class=""><br class="">
</div>
<div class="">DECLARE_ASN1_FUNCTIONS(MYSTRUCT)</div>
<div class="">DECLARE_ASN1_DUP_FUNCTION(MYSTRUCT)</div>
<div class="">DECLARE_ASN1_PRINT_FUNCTION(MYSTRUCT)</div>
<div class="">#define d2i_MYSTRUCT_bio(bp,p) ASN1_d2i_bio_of(MYSTRUCT, MYSTRUCT_new,d2i_ MYSTRUCT,bp,p)</div>
<div class="">#define i2d_MYSTRUCT_bio(bp,o) ASN1_i2d_bio_of(MYSTRUCT,i2d_ MYSTRUCT,bp,o)</div>
<div class="">#define d2i_MYSTRUCT_fp(fp,p) ASN1_d2i_fp_of(MYSTRUCT, MYSTRUCT_new,d2i_ MYSTRUCT,fp,p)</div>
<div class="">#define i2d_MYSTRUCT_fp(fp,p) ASN1_i2d_fp_of(MYSTRUCT,i2d_ MYSTRUCT,fp,p)</div>
</div>
<div class="">____</div>
<div class=""><br class="">
</div>
<div class="">__ File mytypes.c __</div>
<div class="">
<div class="">#include <openssl/asn1t.h></div>
<div class="">#include "mytypes.h"</div>
</div>
<div class=""><br class="">
</div>
<div class="">ASN1_CHOICE(MYCHOICE) = {</div>
<div class="">  ASN1_SIMPLE(MYCHOICE, value.anInteger, ASN1_INTEGER),</div>
<div class="">  ASN1_SIMPLE(MYCHOICE, value.anOctetString, ASN1_OCTET_STRING),</div>
<div class="">  ASN1_SIMPLE(MYCHOICE, value.anASCIIString, ASN1_IA5STRING)</div>
<div class="">} ASN1_CHOICE_END(MYCHOICE)</div>
<div class=""><br class="">
</div>
<div class="">
<div class="">IMPLEMENT_ASN1_FUNCTIONS(MYCHOICE)</div>
<div class="">IMPLEMENT_ASN1_DUP_FUNCTION(MYCHOICE)</div>
<div class="">IMPLEMENT_ASN1_PRINT_FUNCTION(MYCHOICE)</div>
</div>
<div class=""><br class="">
</div>
<div class=""><br class="">
</div>
<div class="">ASN1_SEQUENCE(MYSTRUCT) = {</div>
<div class="">  ASN1_SIMPLE(MYSTRUCT, item1, MYCHOICE)</div>
<div class="">
<div class="">} ASN1_SEQUENCE_END(MYSTRUCT)</div>
</div>
<div class=""><br class="">
</div>
<div class="">
<div class="">IMPLEMENT_ASN1_FUNCTIONS(MYSTRUCT)</div>
<div class="">IMPLEMENT_ASN1_DUP_FUNCTION(MYSTRUCT)</div>
<div class="">IMPLEMENT_ASN1_PRINT_FUNCTION(MYSTRUCT)</div>
</div>
<div class="">____</div>
<div class=""><br class="">
</div>
<div class="">Now you can call i2d_MYSTRUCT()/d2i_MYSTRUCT() to encode/decode such a data type, and similar _bio, _fp, _dup functions as well.</div>
<div class=""><br class="">
</div>
<div class="">
<div class="">Cordialement,</div>
<div class="">Erwann Abalea</div>
</div>
<br class="">
<div>
<blockquote type="cite" class="">
<div class="">Le 20 sept. 2016 à 11:45, Aleksandr Konstantinov <<a href="mailto:aleksandr.v.konstantinov@gmail.com" class="">aleksandr.v.konstantinov@gmail.com</a>> a écrit :</div>
<br class="Apple-interchange-newline">
<div class="">
<div dir="ltr" class="">
<div class="">Hello,</div>
<div class=""><br class="">
</div>
Thanks a lot. One more question if possible. Is there any way to express single element of the ASN1 sequence which can be any of ASN1_OCTET_STRING or ASN1_UTF8STRING and potentially other types?
<div class="">Or maybe there is some tutorial for new interface similar to something like <a href="http://www.umich.edu/~x509/ssleay/asn1-macros.html" class="">http://www.umich.edu/~x509/ssleay/asn1-macros.html</a> for old one?</div>
<div class=""><br class="">
</div>
<div class="">Best regards,</div>
<div class=""><br class="">
</div>
<div class=""><br class="">
</div>
<div class="">A.K.</div>
<div class=""><br class="">
</div>
<div class=""><br class="">
</div>
</div>
<div class="gmail_extra"><br class="">
<div class="gmail_quote">On Mon, Sep 19, 2016 at 3:05 PM, Dr. Stephen Henson <span dir="ltr" class="">
<<a href="mailto:steve@openssl.org" target="_blank" class="">steve@openssl.org</a>></span> wrote:<br class="">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Mon, Sep 19, 2016, Aleksandr Konstantinov wrote:<br class="">
<br class="">
><br class="">
> Thanks. Your answer helped a lot and I'm progressing now. Could You please<br class="">
> also give me a hint what M_ASN1_BIT_STRING_dup/ASN1_<wbr class="">BIT_STRING_dup could be<br class="">
> replaced with?<br class="">
><br class="">
<br class="">
ASN1_STRING_dup should work fine: ASN1_BIT_STRING is actually typedefed to<br class="">
ASN1_STRING.<br class="">
<br class="">
Steve.<br class="">
--<br class="">
Dr Stephen N. Henson. OpenSSL project core developer.<br class="">
Commercial tech support now available see: <a href="http://www.openssl.org/" rel="noreferrer" target="_blank" class="">
http://www.openssl.org</a><br class="">
<span class="HOEnZb"><font color="#888888" class="">--<br class="">
openssl-users mailing list<br class="">
To unsubscribe: <a href="https://mta.openssl.org/mailman/listinfo/openssl-users" rel="noreferrer" target="_blank" class="">
https://mta.openssl.org/<wbr class="">mailman/listinfo/openssl-users</a><br class="">
</font></span></blockquote>
</div>
<br class="">
</div>
-- <br class="">
openssl-users mailing list<br class="">
To unsubscribe: <a href="https://mta.openssl.org/mailman/listinfo/openssl-users" class="">
https://mta.openssl.org/mailman/listinfo/openssl-users</a><br class="">
</div>
</blockquote>
</div>
<br class="">
</body>
</html>