summaryrefslogtreecommitdiff
path: root/src/regress/lib/libcrypto/asn1 (follow)
Commit message (Collapse)AuthorAgeFilesLines
* i2c_ASN1_BIT_STRING() vs ASN1_STRING_FLAG_BITS_LEFTtb9 days1-3/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A nasty quirk in the bit string handling is that the serialization produced by i2d_ASN1_BIT_STRING() depends on whether the the magic ASN1_STRING_FLAG_BITS_LEFT is set. If ASN1_STRING_FLAG_BITS_LEFT is set, the number of unused bits is carried in a->flags & 0x07 and the remainder of the bit string is in a->data. This is terrible and undocumented but handled correctly. If ASN1_STRING_FLAG_BITS_LEFT is not set, all trailing zero bits are (intended to be) chopped off with all sorts of hilarious side effects. I broke this quite thoroughly when I incorrectly ported an overflow check from BoringSSL in: https://github.com/openbsd/src/commit/f81cc285d2aed8b36615119a306533696f3eb66c The result is that we currently return ret = a->length + 1 for both NULL and non-NULL pp. The calls to asn1_ex_i2c() in asn1_i2d_ex_primitive() thus report consistent lengths back, making it succeed. asn1_i2d_ex_primitive() therefore skips a->length + 1 bytes, while i2c_ASN1_BIT_STRING() only overwrites len + 1 bytes, which are possibly fewer. So a caller passing in an output buffer containing garbage (malloc) will get some of that garbage back in the encoding. Further, i2c_ASN1_BIT_STRING() also advances that pointer by the possibly reduced len + 1, but that fortunately doesn't matter since that's an effect local to asn1_ex_i2c(), the only caller of i2c_ASN1_BIT_STRING(). The last bit is that the current behavior may set bogus unused bits coming from the scanning backward madness. I added such an example in the parent commit. The fix is simple: use len after the truncation effect was established, not the original a->length, turning this commit into what my backport should have been. This fixes the two currently failing regress tests, so remove expected failure marker again. ok jsing kenjiro
* asn1basic: add missing test from BoringSSL's test suitetb9 days1-1/+32
| | | | This is another test that fails due to the bug in i2c_ASN1_BIT_STRING().
* asn1basic: switch test to expect correct encodingtb9 days2-4/+6
| | | | This test fails, so mark the asn1basic test as an expected failure
* asn1basic: add example showing current bogus encodingtb9 days1-1/+38
| | | | | | There is a bug in i2c_ASN1_BIT_STRING() resulting in nonsense encoding of some BIT STRINGs with trailing zeroes if ASN1_STRING_FLAG_BITS_LEFT is not set (a rare corner case). This test currently passes when it shouldn't.
* Port most of BoringSSL's TEST(ASN1Test, SetBit)tb2025-12-181-1/+425
| | | | | | | Exercises the batshit crazy truncation behavior of ASN1_BIT_STRING_set_bit() Based on https://boringssl-review.googlesource.com/c/boringssl/+/48225 (still under ISC).
* asn1complex: use ASN1_STRING_get0_data() instead of ASN1_STRING_data()tb2025-12-071-4/+4
|
* asn1: merge invalid generalized time tests into invalid time testsjoshua2025-05-221-16/+10
| | | | | | | | | | | Previously, invalid generalized time tests were split into a separate set of test vectors and a flag was used when calling the test function to indicate they should be tested as generalized only. This simplifies the code a bit, and makes converting to the new test framework easier. ok jsing
* asn1object: improve error message to include returned valuetb2025-02-261-2/+2
| | | | From Kenjiro Nakayama
* asn1time: indicate which comparison function failedtb2024-07-211-4/+7
| | | | extracted from a diff by Kenjiro Nakayama
* asn1object: zap trailing whitespacetb2024-05-291-3/+3
|
* Make it possible for the large OID test to failtb2024-05-291-3/+3
| | | | | | failed was set to 0 at the top of the function, so failure and success were indistinguishable. Move failed = 0 to the end so it can actually fail.
* Add regress coverage for some corner cases of i2d_ASN1_OBJECT()tb2024-05-291-1/+40
|
* Add regress coverage for i2d_ASN1_OBJECT() fixestb2024-05-291-3/+27
|
* Eliminate last timegm() correctly this timetb2024-05-251-5/+25
| | | | | Also add a test case with a generalized time representing the moment one second past the 32-bit epoch wrap.
* Revert previoustb2024-05-251-10/+4
| | | | It wasn't quite right, but I also think the test is bogus.
* asn1time: another use of gmtime was hiding heretb2024-05-251-4/+10
|
* Make ASN1_TIME_set_string_X509 and ASN1_TIME_set_string match the man pagebeck2024-04-082-13/+46
| | | | | | | | | | | This makes it where people can't put dumb values in certs without trying harder, and changes the regress to test this. GENERALIZED times outside of the RFC5280 spec are required for OCSP but these should be constructed with the GENERALIZED time string setters. ok tb@
* Link x509_algor test statically and switch to the internaltb2024-02-292-9/+18
| | | | X509_ALGOR_set0_evp_md()
* asn1time: remove some debugging codetb2024-02-181-3/+1
|
* Tweak previoustb2024-02-181-7/+6
|
* Adjust regress test for memset() requested by jsing on reviewtb2024-02-181-4/+18
|
* Add regress coverage for the new APItb2024-02-182-2/+197
| | | | | This exercises the new API, in particular with respect to overflow behavior around the years 0/9999, which are special for GeneralizedTime/X.509.
* Fix asn1_integer_null_data_test()tb2024-02-041-2/+2
| | | | | | | The failed variable was erroneously initialized to 0, making this test always pass. From Christian Andersen, thanks!
* Remove the string_table testtb2023-12-152-130/+1
| | | | | | | | If it wasn't for security/xca, all of the ASN1_STRING_TABLE API would hit the attic before long. API design by a trained professional... The table can at least be made immutable, which in turn makes this test entirely pointless.
* Provide prototype for X509_ALGOR_set_md()tb2023-10-261-1/+3
| | | | | | Once we remove X509_ALGOR_set_md() we can link this test statically and use X509_ALGOR_set_evp_md() but for now make sure the documented workaround for this garbage API works.
* x509_algor: fix error messagetb2023-10-121-7/+7
|
* x509_algor: add a few missing includestb2023-10-121-1/+4
|
* x509_algor: Turn expected failure into actual failure now that the API istb2023-10-111-3/+3
| | | | fixed.
* Add preallocation dance for X509_ALGOR_set_md() as documentedtb2023-10-111-1/+5
|
* Add regress coverage for X509_ALGOR_*tb2023-10-112-2/+377
| | | | | | | | | This covers the setters and getters. Serialization and deserialization as well as comparison is already well covered by the pieces of regress using certs. There is currently one printf indicating failure. This will be fixed shortly.
* Add regress coverage for ASN1_UTCTIME_cmp_time_t()tb2023-10-051-5/+12
|
* Add some coverage for ASN1_TIME_cmp_time_t() as welltb2023-10-021-1/+14
| | | | | ASN1_UTCTIME_cmp_tim_t() could be done similarly, but then I have to mess with LIBRESSL_INTERNAL. Let's do this after unlock.
* Add regress coverage for ASN1_TIME_compare()tb2023-10-021-1/+78
|
* Minor asn1time tweakstb2023-10-021-26/+12
| | | | Sprinkle some (static) const and garbage collect an unused struct.
* Ensure no memory is leaked after passing NULL to ASN1_TIME_normalize()libressl-v3.8.1job2023-08-301-1/+4
| | | | OK tb@
* Add regress coverage for ASN1_STRING_cmp()tb2023-08-151-1/+147
|
* Add some regress coverage for various ASN1_STRING types to codify sometb2023-08-151-1/+229
| | | | quirks and invariants.
* Add regress coverage for DH and for DSA parameterstb2023-08-111-2/+267
|
* Assert that test->want != NULL at this pointtb2023-05-131-1/+3
| | | | Should make coverity happier
* asn1oct: add a couple more teststb2023-05-121-1/+10
|
* asn1oct: minor tweak in error messagetb2023-05-121-3/+3
|
* Add regress coverage for {s2i,i2s}_ASN1_OCTET_STRINGtb2023-05-122-1/+271
|
* asn1x509 test: Remove unnecessary line continuationstb2023-02-131-24/+24
|
* Let bsd.regress.mk take care of running teststb2022-12-021-8/+1
|
* Make internal header file names consistenttb2022-11-262-4/+4
| | | | | | | | | | | | | | | | Libcrypto currently has a mess of *_lcl.h, *_locl.h, and *_local.h names used for internal headers. Move all these headers we inherited from OpenSSL to *_local.h, reserving the name *_internal.h for our own code. Similarly, move dtls_locl.h and ssl_locl.h to dtls_local and ssl_local.h. constant_time_locl.h is moved to constant_time.h since it's special. Adjust all .c files in libcrypto, libssl and regress. The diff is mechanical with the exception of tls13_quic.c, where #include <ssl_locl.h> was fixed manually. discussed with jsing, no objection bcook
* asn1_string_to_utf8 test: appease coveritytb2022-11-231-2/+8
| | | | | | | | | | Check for ASN_STRING_to_UTF8() failure before checking it matches our expectations. This should convey clearly that test->want_len is never negative. CID 377011 Diagnosed by jsing
* link asn1object test statically in preparation for upcoming bumptb2022-09-111-1/+2
|
* Two more missing long long caststb2022-09-051-3/+3
|
* More long long casts for printing time_ttb2022-09-051-3/+3
|
* Convert from %i to %dtb2022-09-056-56/+56
|