Dear devs,
I am writing a SCVP implementation using OpenSSL.
I can encode a request using i2d_SCVP_REQ, but when i try to decode it using
d2i_SCVP_REQ i get the following error :
3620:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong
tag:.\crypto\asn1\tasn_dec.c:1294:
3620:error:0D06C03A:asn1 encoding routines:ASN1_D2I_EX_PRIMITIVE:nested asn1
error:.\crypto\asn1\tasn_dec.c:830:
3620:error:0D08303A:asn1 encoding
routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1
error:.\crypto\asn1\tasn_dec.c:710:Field=wantBack, Type=SCVP_QUERY
3620:error:0D08303A:asn1 encoding
routines:ASN1_TEMPLATE_NOEXP_D2I:nested asn1
error:.\crypto\asn1\tasn_dec.c:749:Field=query, Type=SCVP_REQ
The 2 structures are defined as follows :
typedef struct scvp_request_st
{
ASN1_INTEGER *cvRequestVersion;
SCVP_QUERY *query;
GENERAL_NAME *requestorRef;
ASN1_OCTET_STRING *requestNonce;
GENERAL_NAME *requestorName;
GENERAL_NAME *responderName;
X509_EXTENSION *requestExtensions;
X509_ALGOR *signatureAlg;
ASN1_OBJECT *hashAlg;
ASN1_UTF8STRING *requestorText;
} SCVP_REQ;
And SCVP_QUERY is :
typedef struct scvp_query_st
{
SCVP_CERTREFS* queriedCerts;
STACK_OF(ASN1_OBJECT) *checks;
STACK_OF(ASN1_OBJECT) *wantBack;
SCVP_VALPOL *validationPolicy;
SCVP_RESPFLAGS *responseFlags;
ASN1_OCTET_STRING *serverContextInfo;
ASN1_GENERALIZEDTIME *validationTime;
STACK_OF(X509) *intermediateCerts;
STACK_OF(SCVP_REVINFO) *revInfos;
ASN1_GENERALIZEDTIME *producedAt;
X509_EXTENSION *queryExtensions;
} SCVP_QUERY;
DECLARE_ASN1_FUNCTIONS(SCVP_QUERY)
In the scvp_asn.c file i have :
ASN1_SEQUENCE(SCVP_REQ) = {
ASN1_SIMPLE(SCVP_REQ, cvRequestVersion, ASN1_INTEGER),
ASN1_SIMPLE(SCVP_REQ, query, SCVP_QUERY),
ASN1_OPT(SCVP_REQ, requestorRef, GENERAL_NAMES),
ASN1_OPT(SCVP_REQ, requestNonce, ASN1_OCTET_STRING),
ASN1_OPT(SCVP_REQ, requestorName, GENERAL_NAME),
ASN1_OPT(SCVP_REQ, responderName, GENERAL_NAME),
ASN1_OPT(SCVP_REQ, requestExtensions, X509_EXTENSION),
ASN1_OPT(SCVP_REQ, signatureAlg, X509_ALGOR),
ASN1_OPT(SCVP_REQ, hashAlg, ASN1_OBJECT),
ASN1_OPT(SCVP_REQ, requestorText, ASN1_UTF8STRING)
}ASN1_SEQUENCE_END(SCVP_REQ)
IMPLEMENT_ASN1_FUNCTIONS(SCVP_REQ)
And for SCVP_QUERY :
ASN1_SEQUENCE(SCVP_QUERY) = {
ASN1_SIMPLE(SCVP_QUERY, queriedCerts, SCVP_CERTREFS),
ASN1_SEQUENCE_OF(SCVP_QUERY, checks, ASN1_OBJECT),
ASN1_SEQUENCE_OF_OPT(SCVP_QUERY, wantBack, ASN1_OBJECT),
ASN1_SIMPLE(SCVP_QUERY, validationPolicy, SCVP_VALPOL),
ASN1_OPT(SCVP_QUERY, responseFlags, SCVP_RESPFLAGS),
ASN1_OPT(SCVP_QUERY, serverContextInfo, ASN1_OCTET_STRING),
ASN1_OPT(SCVP_QUERY, validationTime, ASN1_GENERALIZEDTIME),
ASN1_SEQUENCE_OF_OPT(SCVP_QUERY, intermediateCerts, X509),
ASN1_OPT(SCVP_QUERY, revInfos, SCVP_REVINFO),
ASN1_OPT(SCVP_QUERY, producedAt, ASN1_GENERALIZEDTIME),
ASN1_OPT(SCVP_QUERY, queryExtensions, X509_EXTENSION)
}ASN1_SEQUENCE_END(SCVP_QUERY)
IMPLEMENT_ASN1_FUNCTIONS(SCVP_QUERY)
However if i change the following line :
ASN1_SEQUENCE_OF_OPT(SCVP_QUERY, wantBack, ASN1_OBJECT)
to
ASN1_SEQUENCE_OF(SCVP_QUERY, wantBack, ASN1_OBJECT)
everything works fine.
Can anyone help me?
Kind Regards,
==================================
Eugen Sendroiu
Address: str. Horia nr 3,
bl a8, sc 2, ap 7, Craiova
Dolj - 200490, Romania
Home : +40(0)351 401134
Mobile : +40(0)743 055244
+40(0)730 006760
E-mail : [EMAIL PROTECTED]
[EMAIL PROTECTED]
===================================
____________________________________________________________________________________
Be a better friend, newshound, and
know-it-all with Yahoo! Mobile. Try it now.
http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ