> [EMAIL PROTECTED] - Mon Jun 02 10:49:53 2008]:
>
> I think I've spotted a problem generating PKCS#7 DER-encoded output
> using OpenSSL 0.9.8e
>
> crypto/pkcs7/pk7_asn1.c has an ASN.1 definition for PKCS7_SIGNED as:
>
> > ASN1_NDEF_SEQUENCE(PKCS7_SIGNED) = {
> > ASN1_SIMPLE(PKCS7_SIGNED, version, ASN1_INTEGER),
> > ASN1_SET_OF(PKCS7_SIGNED, md_algs, X509_ALGOR),
> > ASN1_SIMPLE(PKCS7_SIGNED, contents, PKCS7),
> > --> ASN1_IMP_SEQUENCE_OF_OPT(PKCS7_SIGNED, cert, X509, 0),
> > ASN1_IMP_SET_OF_OPT(PKCS7_SIGNED, crl, X509_CRL, 1),
> > ASN1_SET_OF(PKCS7_SIGNED, signer_info, PKCS7_SIGNER_INFO)
> > } ASN1_NDEF_SEQUENCE_END(PKCS7_SIGNED)
>
> RFC 2315 defines the associated ASN.1 type as
> > SignedData ::= SEQUENCE {
> > version Version,
> > digestAlgorithms DigestAlgorithmIdentifiers,
> > contentInfo ContentInfo,
> > --> certificates
> > [0] IMPLICIT ExtendedCertificatesAndCertificates
> > OPTIONAL,
> > crls
> > [1] IMPLICIT CertificateRevocationLists OPTIONAL,
> > signerInfos SignerInfos }
> and defines "ExtendedCertificatesAndCertificates" as
> > ExtendedCertificatesAndCertificates ::=
> > SET OF ExtendedCertificateOrCertificate
>
>
> I think this means that the definition in pk7_asn1.c for "cert" is wrong.
> ASN1_IMP_SEQUENCE_OF_OPT(PKCS7_SIGNED, cert, X509, 0),
> should be
> ASN1_IMP_SET_OF_OPT(PKCS7_SIGNED, cert, X509, 0),
>
> Without this, if you populate a PKCS7_SIGNED structure with a list of
> certificates, they do not get DER-encoded properly (they are written in
> the order they appear in the STACK_OF(X509), like a SEQUENCE rather than
> sorted lexicographically, like a SET should be.)
>
> Is the analysis correct?
>
It is but there is a reason for it...
The PKCS7_SIGNED structure does not have to be DER and is often BER when
for example indefinite length constructed forms which OpenSSL 0.9.9-dev
can generate.
There are also some software packages which rely on the order of the
certificates, the first certificate is given a special meaning.
______________________________________________________________________
OpenSSL Project http://www.openssl.org
Development Mailing List [email protected]
Automated List Manager [EMAIL PROTECTED]