Hi,
I am trying to write replacement ASN1 macros for i2d/d2i functions in openssl 1.1.1
Previously:
typedef struct pkcs7_issuer_and_subject_st
{
X509_NAME *issuer; /* Certificate Issuer's name */
X509_NAME *subject; /* Certificate's subject name */
} PKCS7_ISSUER_AND_SUBJECT;
{
X509_NAME *issuer; /* Certificate Issuer's name */
X509_NAME *subject; /* Certificate's subject name */
} PKCS7_ISSUER_AND_SUBJECT;
----
i2d function:
int i2d_PKCS7_ISSUER_AND_SUBJECT (PKCS7_ISSUER_AND_SUBJECT * a,
unsigned char **pp)
{
M_ASN1_I2D_vars (a);
M_ASN1_I2D_len (a->issuer, i2d_X509_NAME);
M_ASN1_I2D_len (a->subject, i2d_X509_NAME);
M_ASN1_I2D_seq_total ();
M_ASN1_I2D_put (a->issuer, i2d_X509_NAME);
M_ASN1_I2D_put (a->subject, i2d_X509_NAME);
M_ASN1_I2D_finish ();
}
unsigned char **pp)
{
M_ASN1_I2D_vars (a);
M_ASN1_I2D_len (a->issuer, i2d_X509_NAME);
M_ASN1_I2D_len (a->subject, i2d_X509_NAME);
M_ASN1_I2D_seq_total ();
M_ASN1_I2D_put (a->issuer, i2d_X509_NAME);
M_ASN1_I2D_put (a->subject, i2d_X509_NAME);
M_ASN1_I2D_finish ();
}
======================================
New :
DECLARE_ASN1_FUNCTIONS(PKCS7_ISSUER_AND_SUBJECT)
ASN1_SEQUENCE(PKCS7_ISSUER_AND_SUBJECT) = {
ASN1_SIMPLE(PKCS7_ISSUER_AND_SUBJECT, issuer, X509_NAME),
ASN1_SIMPLE(PKCS7_ISSUER_AND_SUBJECT, subject, X509_NAME)
} ASN1_SEQUENCE_END(PKCS7_ISSUER_AND_SUBJECT)
IMPLEMENT_ASN1_FUNCTIONS(PKCS7_ISSUER_AND_SUBJECT)
ASN1_SIMPLE(PKCS7_ISSUER_AND_SUBJECT, issuer, X509_NAME),
ASN1_SIMPLE(PKCS7_ISSUER_AND_SUBJECT, subject, X509_NAME)
} ASN1_SEQUENCE_END(PKCS7_ISSUER_AND_SUBJECT)
IMPLEMENT_ASN1_FUNCTIONS(PKCS7_ISSUER_AND_SUBJECT)
Finally , we can call the function :
ulLen = i2d_PKCS7_ISSUER_AND_SUBJECT (&pkcs7IssuerAndSub, &ptr);
Is this the correct way , or am I missing anything ??
( does it need DECLARE_ASN1_ALLOC_FUNCTIONS & DECLARE_ASN1_ITEM .. ...etc.,.)
Can anyone help me out in this regard !!
Thanks,
Prudvi.