No trouble - filed as https://github.com/pyca/pyopenssl/issues/1031

I guess that given how common this is - the easiest may actually be to have an 
extra flag to verify - with the purpose (or all the flags). As that covers most 
cases.

Dw.

> On 31 Jul 2021, at 14:27, Paul Kehrer <paul.l.keh...@gmail.com> wrote:
> 
> Searching our history I don't believe we've ever bound
> X509_STORE_set_purpose. Did this work in a previous version of
> cryptography and has only recently stopped?
> 
> In general, cryptography does not bind all of OpenSSL, only the
> functions, macros, and constants we need to expose our APIs. We have
> one consumer that we officially support which uses the bindings
> directly (pyOpenSSL), but otherwise we consider the bindings to be
> private API surface and will add/remove as needed to support various
> versions of OpenSSL.
> 
> If cryptography is lacking public APIs for your use case please
> consider filing an issue and helping design/implement those APIs with
> us. Years of experience with maintaining our bindings across dozens of
> OpenSSL versions and various forks has taught us that we can't
> reliably support random bindings we don't use ourselves.
> 
> -Paul
> 
> On Sat, Jul 31, 2021 at 6:38 AM Dirk-Willem van Gulik
> <di...@webweaving.org> wrote:
>> 
>> Could it be that somehow in (in the latest build) - X509_STORE_set_purpose 
>> and associated #defines are missing ?
>> 
>> In below - things work fine up until lib.X509_STORE_set_purpose() - but that 
>> calls gives me a:
>> 
>>    AttributeError: cffi library '_openssl' has no function, constant or 
>> global variable named 'X509_STORE_set_purpose'
>> 
>> With kind regards,
>> 
>> Dw
>> 
>>    # Create the pkcs7 object
>>    pkcs7_object = lib.d2i_PKCS7_bio(bio.bio, ffi.NULL)
>> 
>>    # We're not passing any untrusted certificates, the chain should
>>    # complete, up to, but not including the CA cert, in the CMS package.
>>    #
>>    other = lib.sk_X509_new_null()
>>    binding._openssl_assert(lib, other != ffi.NULL)
>> 
>>    # We are prividing exactly one certificate - that of the certificate
>>    # authority - as trusted. It has to be signed by this national root.
>>    #
>>    store = lib.X509_STORE_new()
>>    lib.X509_STORE_add_cert(store, certificate._x509) # type: ignore
>> 
>>    # As we're using certifcates somewhat off-label; we need to relax
>>    # the purpose verification. This is the equivalent of the -purpose any
>>    # flag in:
>>   # openssl smime -verify -inform DER -content payload.raw \
>>   #      -CAfile ca.pem -in signature.p7 -purpose any
>>   lib.X509_STORE_set_purpose(store, 7) # X509_PURPOSE_ANY
>> 
>> _______________________________________________
>> Cryptography-dev mailing list
>> Cryptography-dev@python.org
>> https://mail.python.org/mailman/listinfo/cryptography-dev
> _______________________________________________
> Cryptography-dev mailing list
> Cryptography-dev@python.org
> https://mail.python.org/mailman/listinfo/cryptography-dev
> 

_______________________________________________
Cryptography-dev mailing list
Cryptography-dev@python.org
https://mail.python.org/mailman/listinfo/cryptography-dev

Reply via email to