Commit graph

2508 commits

Author SHA1 Message Date
Quentin Retourne
d6cac753c2
Add support for decrypting S/MIME messages (#11555)
* first python API proposition

first round-trip tests

feat: made asn1 structures readable

refacto: adapted existing functions accordingly

feat/pkcs12: added symmetric_decrypt

feat: deserialize 3 possible encodings

feat: handling AES-128

feat: raise error when no recipient is found

feat/pkcs7: added decanonicalize function

feat/asn1: added decode_der_data

feat/pkcs7: added smime_enveloped_decode

tests are the round-trip (encrypt & decrypt)

more tests for 100% python coverage

test support pkcs7_encrypt with openssl

added algorithm to pkcs7_encrypt signature

refacto: decrypt function is clearer

flow is more natural

refacto: added all rust error tests

refacto: added another CA chain for checking

fix: const handling

Refactor PKCS7Decryptor to pkcs7_decrypt

refacto: removed SMIME_ENVELOPED_DECODE from rust code

refacto: removed decode_der_data

adapted tests accordingly

removed the PEM tag check

added tests for smime_decnonicalize

one more test case

Update src/rust/src/pkcs7.rs

Co-authored-by: Alex Gaynor <alex.gaynor@gmail.com>

took comments into account

pem to der is now outside of decrypt

fix: removed test_support pkcs7_encrypt

added vector for aes_256_cbc encrypted pkcs7

feat: not using test_support decrypt anymore

added new vectors for PKCS7 tests

feat: using pkcs7 vectors

removed previous ones

fix: changed wrong function

feat: added certificate issuer check

test: generating the RSA chain

removed the vectors accordingly

moved symmetric_decrypt to pkcs7.rs

* Update src/cryptography/hazmat/primitives/serialization/pkcs7.py

Co-authored-by: Alex Gaynor <alex.gaynor@gmail.com>

* fix: removed use of deprecated new_bound for PyBytes

* corrected some error types

* updated tests accordingly

* fix: handling other key encryption algorithms

added vectors & tests accordingly

* first attempts raising error when no header to remove

* one more test to handle text data without header

* fix: went back to the previous implementation

* refacto: removed the return part

* feat: Binary option does not seem useful for decryption

removed decanonicalization function

adapted tests accordingly

* moved logic into rust

only left some checks (for now?)

* removed pyfunction for the inner decrypt one

* added checks in rust now :)

changed name for clarity

* removed unused function

* some checks not needed anymore

* removed a parameter

* took comments into account

* removed unused import

removed excess get_type

* added first unwrap corrections

cleaned tests, added some others

added more vectors

* no more unwrap for parameter checks

* removing headers is Python now

added tests accordingly

will compare with OpenSSL

* final corrections?

* first version of documentation

some minor refactoring

* corrected doctests

* better indentation

* doctest: added RSA private key

* oops

---------

Co-authored-by: Alex Gaynor <alex.gaynor@gmail.com>
2024-11-26 08:39:53 -05:00
Alex Gaynor
8209d63ae7
fixes #11944 -- don't panic on attributes with no values (#11947) 2024-11-14 14:16:43 -08:00
Paul Kehrer
a7aa8cec96
argon2id support (#11524)
* argon2id support

* make it all rust now

* set a threadpool number

* address comments

* set threadpool to max(available, current)

* review comments

* a few more improvements

* Update docs/hazmat/primitives/key-derivation-functions.rst

Co-authored-by: Alex Gaynor <alex.gaynor@gmail.com>

---------

Co-authored-by: Alex Gaynor <alex.gaynor@gmail.com>
2024-11-11 14:42:26 +00:00
Alex Gaynor
da437d16a9
fixes #11920 raise a clean Python error on DSA signing failure due to nilpotent (#11921) 2024-11-11 14:37:32 +00:00
Oleg Höfling
fef127093b
feat(admissions): implement parsing of admissions extension (#11903)
* feat: implement parsing of admissions extension

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* chore: add tests for admissions extension parsing

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* chore: use cryptography result return type

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* chore: apply fixes done by cargo fmt and clippy

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* add gematik company name and the gmbh abbreviations to known words

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* fix: regenerate the synthetic certificate with additional admission covering the case of naming authority with no data

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* fix: parse none for profession_oids if profession_oids is none

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* chore: apply formatting to changes in rust codebase

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* refactor: switch return type of parse_profession_infos from PyObject to Bound<PyAny>

Signed-off-by: Oleg Hoefling <oleg.hoefling@gmail.com>

* refactor: switch return type of parse_naming_authority from PyObject to Bound<PyAny>

Signed-off-by: Oleg Hoefling <oleg.hoefling@gmail.com>

* refactor: switch return type of parse_admissions from PyObject to Bound<PyAny>

Signed-off-by: Oleg Hoefling <oleg.hoefling@gmail.com>

* chore: remove gematik certs from repo

Signed-off-by: Oleg Hoefling <oleg.hoefling@gmail.com>

* chore: remove gematik certs from this pr

Signed-off-by: Oleg Hoefling <oleg.hoefling@gmail.com>

* chore: extend parser tests with an additional synthetic certificate to complete rust coverage

Signed-off-by: Oleg Hoefling <oleg.hoefling@gmail.com>

* chore: add description for the additional certificate without authority

Signed-off-by: Oleg Hoefling <oleg.hoefling@gmail.com>

* use into_bound(py) as shortcut, refrain from using to_object() in all added functions

Signed-off-by: Oleg Hoefling <oleg.hoefling@gmail.com>

* add better description for the admissions synthetic cert

Signed-off-by: Oleg Hoefling <oleg.hoefling@gmail.com>

* adjust description to avoid using misspelled words

Signed-off-by: Oleg Hoefling <oleg.hoefling@gmail.com>

---------

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>
Signed-off-by: Oleg Hoefling <oleg.hoefling@gmail.com>
2024-11-10 20:06:01 -05:00
Hanno Böck
78e89e4975
Speedup rsa_recover_prime_factors() by using random value (#11899)
* Speedup rsa_recover_prime_factors() by using random value

* Comply with ruff codingstyle

* Reject invalid combinations of n, d, e early to avoid excessive runtime

* Add second failure test case for rsa_recover_prime_factors to hit early error path

* Remove leftover debug code

* Reduce _MAX_RECOVERY_ATTEMPTS and remove obsolete comment

Previously, the code would increase a in steps of 2, therefore,
_MAX_RECOVERY_ATTEMPTS was twice the number of tries. With the new
code, this is no longer the case.
2024-11-10 14:34:58 +00:00
Alex Gaynor
31d9e01b36
fixes #11912 -- when checking ccm decrypt max length, exclude tag (#11913) 2024-11-08 08:36:33 +00:00
Oleg Höfling
53035da3dd
feat(admissions): implement encoding of admissions extension (#11892)
* feat: implement encoding of admissions extension

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* chore: add encoding tests

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* refactor: split encoding of inner objects into separate functions

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* fix: simplify code comment to pass the line length checks

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* chore: add test to check encoding of none values

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* chore: extend none values test to also check encoding of naming authority with none values

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* fix: use none checks when converting python data

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* fix: raise a valueerror if the url can not be encoded to an ia5string

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* chore: revert to truthness check for py_oids for now, will be amended in a separate pr

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* fix: raise a valueerror if the registration_number can not be encoded to a printablestring

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* fix: encode none for profession_oids if profession_oids is none

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

---------

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>
2024-11-06 23:41:29 -05:00
Oleg Höfling
81d98f4457
fix(admissions): allow profession_oids field being none (#11908)
* fix: allow profession_oids to be none

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* chore: provide explicit type hints for profession oids in hash calculation

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* chore: remove unused ignore in profession info init test

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* fix(profession info): simplify profession oids handling in hash calculation

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

---------

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>
2024-11-06 18:38:20 -05:00
Alex Gaynor
7a7f916e03
fixes #11160 -- include the cert in the error message for verification error (#11898) 2024-11-06 09:50:30 +00:00
Oleg Höfling
cf93084b0e
feat(admissions): add admissions extension type (#11886)
* feat(admissions): add admissions extension type

Signed-off-by: Oleg Hoefling <oleg.hoefling@gmail.com>

* fix: use tuple for admissions unpacking in hash code calculation

Signed-off-by: Oleg Hoefling <oleg.hoefling@gmail.com>

---------

Signed-off-by: Oleg Hoefling <oleg.hoefling@gmail.com>
2024-11-04 06:42:08 -05:00
Oleg Höfling
4d86913082
feat(admissions): add admission type for the admissions extension (#11883)
* feat(admissions): add admission type for the admissions extension

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* refactor: explicitly convert profession infos to tuples for hash calculation

Signed-off-by: Oleg Hoefling <oleg.hoefling@gmail.com>

* refactor: add asn1 trait derives to admission type, commented out

Signed-off-by: Oleg Hoefling <oleg.hoefling@gmail.com>

---------

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>
Signed-off-by: Oleg Hoefling <oleg.hoefling@gmail.com>
2024-11-03 17:12:39 -05:00
Oleg Höfling
f65ab4d7f5
feat(admissions): add profession info type for the admissions extension (#11881)
* feat(admissions): add profession info python type for the admissions extension

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* feat(admissions): add profession info rust type for the admissions extension

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* feat(admissions): add test for profession info hash implementation

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* fix(admissions): minor fixes

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* remove the asn1 traits from the profession info rust type

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* remove the explicit mark from the naming authority field

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* chore: add commented out annotation for the naming authority field

Signed-off-by: Oleg Hoefling <oleg.hoefling@gmail.com>

* fix: use correct type for add_profeccion_info field

Signed-off-by: Oleg Hoefling <oleg.hoefling@gmail.com>

* refactor: explicitly convert profession items and oids to tuples for hash calculation

Signed-off-by: Oleg Hoefling <oleg.hoefling@gmail.com>

* refactor: add asn1 trait derives to naming authority and profession info types, commented out

Signed-off-by: Oleg Hoefling <oleg.hoefling@gmail.com>

---------

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>
Signed-off-by: Oleg Hoefling <oleg.hoefling@gmail.com>
2024-11-03 20:16:23 +00:00
Oleg Höfling
09dfc983a4
feat(admissions): add naming authority type for the admissions extension (#11876)
* feat(admissions): add naming authority python type for the admissions extension

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* feat(admissions): user short names for naming authority fields

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* feat(admissions): add naming authority rust type for the admissions extension

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* chore: use assert_eq macro for value comparison in naming authority test

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* chore: drop useless test for naming authority rust type

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

* fix: correct the naming authority text type

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>

---------

Signed-off-by: oleg.hoefling <oleg.hoefling@gmail.com>
2024-11-03 14:49:47 +00:00
Alex Gaynor
62f1155062
fixes #11878 -- check for keys too large when deriving an EC key from a private value (#11879) 2024-11-03 14:33:28 +00:00
Robby Cornelissen
7fa390cfe2
Support 128-bit OID arcs (#11820)
* Support 128-bit OID arcs

* Update Cargo.lock to reflect updated rust-asn1 dependency
2024-10-24 04:36:14 +00:00
Alex Gaynor
8b3de53ed8
When failing to parse SANs or IANs, include which it was that failed (#11785) 2024-10-17 20:13:03 -07:00
Han Yu
6bd5d49899
Inconsistent IDP extension constraint check (#11467)
* Per RFC5280 Section 5.2.5, the Issuing Distribution Point extension in a CRL can have only one of onlyContainsUserCerts, onlyContainsCACerts, onlyContainsAttributeCerts set to TRUE. However, extensions.py (lines 1991 : 2003), indirectCRL is also included, which leads to invalid CRL even if the RFC requirement is met. The proposed fix is to drop indirectCRL from the check so it conforms to the RFC.

* Made the comment shorter per line to meet the format requirement.
Removed a invalid test case for IDP
2024-10-12 01:43:23 +00:00
Ivan Desiatov
1767ad0a46
X509 custom verification groundwork (#11559)
* Add CustomPolicyBuilder foundation.

* Add EKU getters to ClientVerifier and ServerVerifier.

* Document the implemented part of custom verification.

* Remove `subject` field from VerifiedClient, rename `sans` back to `subjects`.

* Remove EKU-related setters, getters and documentation from this PR.

* Use double backticks in reStructuredText.

* Remove CustomPolicyBuilder in favor of extending PolicyBuilder.

* Code style improvements.

* Resolve coverage issues.
2024-10-08 22:27:15 -04:00
Gonzalo Atienza
6fbdffed71
otp-generage-hardening (#11703) 2024-10-07 00:57:57 +00:00
Alex Gaynor
474b7df73d
See if we can remove this check (#11678) 2024-10-01 06:22:48 -07:00
Quentin Retourne
1c32edcabc
Silencing mmap mypy warning on windows (#11570)
* silencing the mmap mypy warning on windows

even though the lib doesn't exist on this platform

* better way without coverage issues

* trying with pragma no cover :(

* using type: ignore

* another test with pragma: no cover

* testing type: ignore with specific exclusions
2024-09-11 20:43:26 -04:00
Quentin Retourne
36edeb5750
Rustify PKCS7 unpadding (#11556)
* refacto: Added rust PKCS7Unpadding

refacto: removed check_pkcs7_padding function

refacto: removed python _PKCS7Unpadding

* took comment into account
2024-09-07 08:28:06 -04:00
Alex Gaynor
b5a312f99c
fixes #11453 -- include localKeyID when serializaing a key with a cert (#11454) 2024-08-22 17:22:47 -07:00
William Woodruff
4a2d9969aa
Relax root CA AKI field checks (#11462)
* Relax root CA AKI field checks

Closes #11461.

Signed-off-by: William Woodruff <william@yossarian.net>

* CHANGELOG: record changes

Signed-off-by: William Woodruff <william@yossarian.net>

---------

Signed-off-by: William Woodruff <william@yossarian.net>
2024-08-20 08:42:56 -07:00
David Benjamin
c2aad20ef8
Remove unnecessary test dependencies on RSA-512 (#11444)
* Remove unnecessary test dependencies on RSA-512

test_unsupported_hash and test_prehashed_digest_mismatch work just fine
with realistic RSA key sizes. (They also, as written, silently test
nothing when the backend rejects RSA-512. As a reminder, RSA-512 was
broken since 1999.)

test_rsa_fips_small_key wants a small key, but I assume RSA-1024 is
fine.

* Keep using RSA-512 for test_rsa_fips_small_key as a RHEL-8 accommodation
2024-08-17 15:48:58 -04:00
David Benjamin
8755923903
Bump RSA-512 test keys to RSA-2048 (#11443)
* Bump RSA-512 test keys to RSA-2048

RSA-512 was broken in 1999. cryptography.io should not be requesting
its backend library support it in 2024.

* Update test-vectors.rst

The replacement keys were generated fresh, and this document seems to
just cite the external ones.

* Document custom test vectors
2024-08-17 18:38:57 +00:00
maxmelamed
df8e11b95d
Add support for extract_timestamp in MultiFernet (#11427)
Co-authored-by: Max Melamed <max.melamed@Whatnot6Y5J36W2.lan>
2024-08-13 15:42:35 +00:00
William Woodruff
0db3ed8707
extensions: EKU must contain at least one member (#11383)
* extensions: EKU must contain at least one member

Signed-off-by: William Woodruff <william@trailofbits.com>

* record changes

Signed-off-by: William Woodruff <william@trailofbits.com>

* empty EKU test vector

Signed-off-by: William Woodruff <william@trailofbits.com>

* typo

Signed-off-by: William Woodruff <william@trailofbits.com>

---------

Signed-off-by: William Woodruff <william@trailofbits.com>
2024-08-02 15:06:46 +00:00
Alex Gaynor
42788a0353
Fix exchange with keys that had Q automatically computed (#11309)
fixes #10790
closes #10864
closes #11218
2024-07-20 08:05:18 -07:00
Alex Gaynor
2dbdfb8f39
don't assign unused name (#11310) 2024-07-20 07:49:54 -07:00
Facundo Tuesca
0faaffc2f5
Add support for encrypting S/MIME messages (#10889)
* Add support for encrypting S/MIME messages

* Move PKCS7 decrypt test function to Rust

* Use symmetric encryption function from PKCS12

* Remove debug file write from tests

* Remove unneeded backend parameter

* docs and changelog
2024-07-18 08:52:09 -07:00
William Woodruff
a9bc879d61
Bump vectors (#11288)
* Bump x509-limbo and/or wycheproof in CI

* test_limbo: allow build_server_verifier to fail

...in a predictable way.

* test_limbo: remove assert

* test_limbo: return early when exceptional

---------

Co-authored-by: pyca-boringbot[bot] <pyca-boringbot[bot]+106132319@users.noreply.github.com>
2024-07-17 02:27:37 +00:00
Alex Gaynor
4616dbe631
Migrate PKCS#7 test_support function to Rust (#11282) 2024-07-15 17:29:17 -07:00
Alex Gaynor
485432f0bb
Move rust code that exists for our tests to its own module (#11280)
* Move rust code that exists for our tests to its own module

* Update src/rust/src/test_support.rs

Co-authored-by: Paul Kehrer <paul.l.kehrer@gmail.com>

---------

Co-authored-by: Paul Kehrer <paul.l.kehrer@gmail.com>
2024-07-15 22:31:51 +00:00
Alex Gaynor
e7935f2128
Try removing a workaround for old OpenSSL (#11275)
* Try removing a workaround for old OpenSSL

* Update test_pkcs7.py
2024-07-15 12:10:26 -07:00
Alex Gaynor
67271cbab2
Remove workaround for old libressl (#11274)
* Remove workaround for old libressl

* Update backend.py
2024-07-14 19:04:51 -07:00
Alex Gaynor
7c4a2e13bd
Remove typechecking that pyo3 does automatically (#11212) 2024-07-07 05:53:46 -07:00
Alex Gaynor
2c45811dab
Enforce length for CommonName (#11201)
fixes #10553
2024-07-05 23:27:40 +00:00
Paul Kehrer
2b371f418b
add support for CipherContext.update_nonce (#10437)
* add support for CipherContext.reset_nonce

This only supports ChaCha20 and ciphers in CTR mode.

* expand tests to reset to different nonces
2024-07-05 18:54:12 -04:00
Daniel Lenski
8a7f27be3d
Add rsa_recover_private_exponent function (#11193)
Given the RSA public exponent (`e`), and the RSA primes (`p`, `q`), it is possible
to calculate the corresponding private exponent `d = e⁻¹ mod λ(n)` where
`λ(n) = lcm(p-1, q-1)`.

With this function added, it becomes possible to use the library to reconstruct an RSA
private key given *only* `p`, `q`, and `e`:

    from cryptography.hazmat.primitives.asymmetric import rsa

    n = p * q
    d = rsa.rsa_recover_private_exponent(e, p, q)  # newly-added piece
    iqmp = rsa.rsa_crt_iqmp(p, q)                  # preexisting
    dmp1 = rsa.rsa_crt_dmp1(d, p)                  # preexisting
    dmq1 = rsa.rsa_crt_dmq1(d, q)                  # preexisting

    assert rsa.rsa_recover_prime_factors(n, e, d) in ((p, q), (q, p))  # verify consistency

    privk = rsa.RSAPrivateNumbers(p, q, d, dmp1, dmq1, iqmp, rsa.RSAPublicNumbers(e, n)).private_key()

Older RSA implementations, including the original RSA paper, often used the
Euler totient function `ɸ(n) = (p-1) * (q-1)` instead of `λ(n)`.  The
private exponents generated by that method work equally well, but may be
larger than strictly necessary (`λ(n)` always divides `ɸ(n)`).  This commit
additionally implements `_rsa_recover_euler_private_exponent`, so that tests
of the internal structure of RSA private keys can allow for either the Euler
or the Carmichael versions of the private exponents.

It makes sense to expose only the more modern version (using the Carmichael
totient function) for public usage, given that it is slightly more
computationally efficient to use the keys in this form, and that some
standards like FIPS 186-4 require this form.  (See
https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf#page=63)
2024-07-05 15:14:04 -07:00
Alex Gaynor
a5fb2d42d4
Convert the remainder of PKCS#12 encryption to Rust (#11200) 2024-07-05 18:32:09 +00:00
Magnus Watn
eae331491c
Add _utc datetime methods to x509.ocsp (#11183)
Fixes #11170.
2024-06-30 12:08:56 -04:00
David Buchanan
56933bf61a
utils.int_to_bytes: guard against zero-length (#11173)
* utils: guard against zero-length int_to_bytes

* add tests for HBKDF with llen=0

* kbkdf: guard against llen==0

* test that kbkdf rejects llen==0 at __init__

* add standalone test for zero-length int_to_bytes

* Update src/cryptography/hazmat/primitives/kdf/kbkdf.py

typo

Co-authored-by: Alex Gaynor <alex.gaynor@gmail.com>

---------

Co-authored-by: Alex Gaynor <alex.gaynor@gmail.com>
2024-06-29 15:23:57 +00:00
William Woodruff
f370b09810
policy/extension: improve extension policy errors (#11162)
* policy/extension: improve extension policy errors

* verification: ValidationError::ExtensionError variant

Begin cleaning things up.

* policy/extension: remove redundant clone

* ensure that we render the ext OID

* lib: coverage for other display arms

* relocate custom vector

* test-vectors: typo
2024-06-25 21:51:24 -04:00
Alex Gaynor
da45641e46
Convert PKCS7PaddingContext to Rust (#11089) 2024-06-10 12:22:36 -04:00
Alex Gaynor
f3b0e165f0
Added a benchmark for fernet (#11088)
This tests many different primitives
2024-06-08 07:52:13 -07:00
Alex Gaynor
d54d67353b
Register OCSPSingleResponse implementation with interface (#11066) 2024-06-03 06:32:28 -07:00
Alex Gaynor
064a463eae
added tests for PKCS12Certificate with encryption builder (#11060) 2024-06-03 05:23:51 -07:00
Alex Gaynor
99de528c12
fixes #11062 -- register OCSP implementations with interfaces (#11063) 2024-06-03 05:08:11 -07:00