Re: Creating a PKCS7 detached signature with providers

Mad <[email protected]> Fri, 3 Oct 2025 06:07:08 -0700 (PDT)
Newsgroups gmane.comp.encryption.openssl.user
Message-ID <[email protected]>
 

Thank you for your reply and sorry for the length of mine, but I think I 
need to be exhaustive.

For more detail, I've tried quite a few things to make myself compatible. 
The executed code looks like this (I don't include error handling so as not 
to make the code too heavy but I handle each function return correctly):

EVP_MD *md=EVP_MD_fetch(NULL, "SHA256", NULL);
CMS_ContentInfo *pCMS=CMS_sign(NULL, NULL, NULL, NULL, CMS_PARTIAL | 
CMS_DETACHED);
CMS_add1_signer(pCMS, PX509Cert, pPrivKey, md, CMS_NOATTR);
CMS_final(pCMS, pDataBIOIn, NULL, SMIME_BINARY);

If I don't prepare anything before, when I call ‘CMS_final’ I get the 
following error "lib(46): ossl_cms_DigestAlgorithm_init_bio(149)‘ which 
corresponds to ’ERR_raise(ERR_LIB_CMS, CMS_R_UNKOWN_DIGEST_ALGORITHM);".

Of the attempts I have tried, the one that seems the least bad was to add 
‘EVP_add_digest(EVP_MD_fetch(NULL, “SHA256”, NULL));’ after initialising my 
providers. In this case ‘CMS_final’ does not cause an error, but when I 
retrieve my signature via ‘cbP7Data=id2_CMS_ContentInfo(pCMS, NULL);’ I get 
‘cbP7Data==-1’ and the error "lib(13) : asn1_template_ex :reason(222)' 
which corresponds to 'ERR_raise(ERR_LIB_ASN1, 
ASN1_R_ILLEGAL_ZERO_CONTENT);" but I can't find out which one it 
corresponds to.
I have the impression that something is missing when calling ‘CMS_final’ 
but I can't say what.

With regard to the digest providers that I define, I implement 
PROV_NAMES_SHA1, PROV_NAMES_SHA256, PROV_NAMES_512 and PROV_NAMES_MD5.

Finally, I'm not sure this is very useful but, as I'm in a restricted 
environment, I had to limit as much as possible the modules compiled with 
these options when generating my OpenSSL lib (it's not impossible that I 
removed something too much but I don't know what):

« no-autoalginit no-afalgeng no-aria no-asan no-asm no-async 
no-autoload-config no-bf no-blake2 no-camellia no-capieng no-cast no-chacha 
no-cmac no-cmp no-crypto-mdebug-backtrace no-ct no-deprecated no-des 
no-dgram no-dh no-dsa no-ec no-dynamic-engine no-ec no-ec2m no-ecdh 
no-ecdsa no-err no-external-tests no-filenames no-fuzz-libfuzzer 
no-fuzz-afl no-gost no-heartbeats no-hw no-idea no-makedepend no-md2 no-md4 
no-mdc2 no-msan no-multiblock no-nextprotoneg no-pinshared no-ocb no-ocsp 
no-pic no-posix-io no-psk no-poly1305 no-rc2 no-rc4 no-rc5 no-rdrand 
no-rfc3779 no-rmd160 no-scrypt no-siphash no-sm2 no-sm3 no-sm4 no-srp 
no-srtp no-sse2 no-ssl no-ssl-trace no-static-engine no-stdio no-tests 
no-threads no-ts no-ui no-ubsan no-ui-console no-unit-test no-winstore 
no-whirlpool no-comp no-sctp no-seed no-shared no-ec_nistp_64_gcc_128 
no-egd no-dsa no-dso no-dtls no-dtls1 no-dtls1_2 no-legacy no-sock no-tls 
no-tls1 no-tls1_1 no-tls1_2 no-tls1_3 »

Mad


Le jeudi 2 octobre 2025 à 18:13:16 UTC+2, Matt Caswell a écrit :

> On Thu, 2 Oct 2025 at 10:40, Mad <[email protected]> wrote:
>
>> Hello,
>>
>> This is the first time I've posted on a mailing list, so sorry if the 
>> tone isn't correct.
>>
>> I'm in the process of finalising a project to update OpenSSL 1.1.1 to 
>> 3.5.X with the purpose of doing ASN1 decoding and PKCS7 signing where I 
>> integrate my own cryptography via providers (digest, cipher, mac, 
>> signature, asym_cipher, keymgmt and kdf).
>>
>> When implementing the detached PKCS7 signature, I tried to use 
>> ‘PKCS7_sign’ or ‘CMS_sign(NULL, NULL, NULL, NULL, CMS_PARTIAL|CMS_DETACHED) 
>> + CMS_add1_signer(...) + CMS_final(...)’, but the problem was that I 
>> systematically came across the ‘EVP_get_digestbyname’ function in the base 
>> layers.
>>
>> If I understand correctly, the ‘EVP_get_digestbyname’ function is 
>> incompatible with the OpenSSL 3+ provider system. I wanted to know if there 
>> was a trick to make ‘EVP_get_digestbyname’ work or if there is a method 
>> that I haven't seen to make a detached signature in DER format.
>>
> It's not "incompatible" with the provider system - but it is restricted. 
> It only knows about certain built-in digests - but those digests can still 
> come from a provider. Where in the CMS code are you hitting it?
>
> Matt
>
>  
>
>> Thank you for reading and your time.
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "openssl-users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected]
>> To view this discussion visit 
>> https://groups.google.com/a/openssl.org/d/msgid/openssl-users/e3df5e46-f50d-4dcc-a852-38f2ca2014afn%40openssl.org 
>> <https://groups.google.com/a/openssl.org/d/msgid/openssl-users/e3df5e46-f50d-4dcc-a852-38f2ca2014afn%40openssl.org?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups "openssl-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to openssl-users+unsubscribe-MCmKBN63+Bmbup2nOX2J7Q@public.gmane.org
To view this discussion visit https://groups.google.com/a/openssl.org/d/msgid/openssl-users/00e395e1-293b-4a99-a80e-a47a286fda1dn%40openssl.org.