summaryrefslogtreecommitdiff
path: root/src/lib/libc/stdlib/reallocarray.c (unfollow)
Commit message (Collapse)AuthorFilesLines
2023-06-25Remove EC_EXTRA_DATAtb4-230/+4
With the ecdh_check() and ecdsa_check() abominations gone, we can finally get rid of EC_EXTRA_DATA and EC_KEY_{get,insert}_key_method_data(). The EC_EX_DATA_*() handlers, (which fortunately have always had "'package' level visibility") join the ride to the great bit bucket in the sky. Thanks to op for making this possible. ok jsing
2023-06-25Remove {ecdh,ecdsa}_check() and {ECDH,ECDSA}_DATAtb4-223/+4
This is now unused code. Removing it will free us up to remove some other ugliness in the ec directory. ok jsing
2023-06-25Remove method wrappers that use {ecdh,ecdsa}_check()tb2-73/+14
Now that it is no longer possible to set a custom {ECDH,ECDSA}_METHOD, EC_KEY_METHOD can just call the relevant method directly without the need for this extra contortion. ok jsing
2023-06-25ecdsa_do_sign(): remove useless ecdsa_check() calltb1-4/+2
ok jsing
2023-06-25Make ECDH and ECDSA ex_data handlers always failtb2-26/+8
They will be removed in the next major bump. No port uses them. They use code that is in the way of upcoming surgery. Only libtls and smtpd used to use the ECDSA version. ok jsing
2023-06-25Make {ECDH,ECDSA}_set_method() always failtb2-29/+4
They will be removed in the next major bump. No port uses them. They use code that is in the way of upcoming surgery. Only libtls used the ECDSA version, but thankfully op cleaned that up. ok jsing
2023-06-25x509v3.h: unwrap a linetb1-3/+2
2023-06-25Adjust/fix X509_check_purpose(3) documentationtb1-3/+3
2023-06-25Check for duplicate X.509v3 extension OIDstb1-1/+45
Per RFC 5280, 4.2: A certificate MUST NOT include more than one instance of a particular extension. This implements such a check in x509v3_cache_extensions() by sorting the list of extensions and looking for duplicate neighbors. This sidesteps complications from extensions we do not know about and keeps algorithmic complexity reasonable. If the check fails, EXFLAG_INVALID is set on the certificate, which means that the verifier will not validate it. ok jsing
2023-06-25Provide additional BN primitives for BN_ULLONG architectures.jsing1-21/+79
On BN_ULLONG architectures, the C compiler can usually do a decent job of optimising primitives, however it struggles to see through primitive calls due to type narrowing. As such, providing explicit versions of compound primitives can result in the production of more optimal code. For example, on arm the bn_mulw_addw_addw() primitive can be replaced with a single umaal instruction, which provides significant performance gains. Rather than intermingling #ifdef/#else throughout the header, the BN_ULLONG defines are pulled up above the normal functions. This also allows complex compound primitives to be reused. The conditionals have also been changed from BN_LLONG to BN_ULLONG, since that is what really matters. ok tb@
2023-06-25ech_local.h: remove unused ECDH_FLAG_FIPS_METHODtb1-9/+1
2023-06-25ec_local.h: move ec_group_simple_order_bits down a bittb1-3/+2
2023-06-24Remove precompute_mult/have_precompute_mult from EC_METHOD.jsing2-26/+4
These are no longer in use - stub EC_GROUP_precompute_mult() and EC_GROUP_have_precompute_mult() to match their existing behaviour. ok tb@
2023-06-24Mop up EC_GROUP precomp machinery.jsing3-252/+10
Since there are now no EC implementations that perform pre-computation at the EC_GROUP level, remove all of the precomp machinery, including the extra_data EC_GROUP member. The ec_wNAF_mul() code is horrific - simply cut out the precomp code, rather than trying to rewrite it (that's a project for another day). ok tb@
2023-06-24Mop up ec_wNAF_{,have_}precompute_mult().jsing2-206/+2
These were previously called by GF2m code and are no longer used. Also remove ec_pre_comp_new(), since it is only called by ec_wNAF_precompute_mult() and is now unused. ok tb@
2023-06-24Add conditional around bn_mul_words() call.jsing1-2/+4
At least one of our bn_mul_words() assembly implementation fails to handle n = 0 correctly... *sigh*
2023-06-24Assign and test.jsing1-3/+2
2023-06-24Check for non-zero length rather than a zero value.jsing1-2/+2
This removes a data dependent timing path from BN_sqr(). ok tb@
2023-06-24Rewrite and simplify bn_sqr()/bn_sqr_normal().jsing3-39/+44
Rework bn_sqr()/bn_sqr_normal() so that it is less convoluted and more readable. Instead of recomputing values that the caller has already computed, pass it as an argument. Avoid branching and remove duplication of variables. Consistently use a_len and r_len naming for lengths. ok tb@
2023-06-24Provide optimised bn_subw() and bn_subw_subw() for arm.jsing1-1/+50
2023-06-23Codify BN_asc2bn(NULL, *) behavior in regress.tb1-1/+11
2023-06-23Avoid crash in BN_asc2bn()tb1-2/+3
Historically (and currently in OpenSSL), BN_asc2bn() could be called with NULL, but only for positive numbers. So BN_asc2bn(NULL, "1") would succeed but BN_asc2bn(NULL, "-1"), would crash. The other *2bn functions return a length, so accepting a NULL makes some sense since it allows callers to skip over part of the string just parsed (atoi-style). For BN_asc2bn() a NULL bn makes no sense because it returns a boolean. The recent CBS rewrite makes BN_asc2bn(NULL, *) always crash which in turn made Coverity throw a fit. Another change of behavior from that rewrite pertains to accidents (or is it madness?) like -0x-11 and 0x-11 being parsed as decimal -17 (which Ingo of course spotted and diligently documented). This will be addressed later. ok jsing
2023-06-23Fix return check for BN_hex2bn()tb1-2/+2
Purely cosmetic change taking into account the fact that this function returns a length rather than a boolean. This is the last offender in the library. ok jsing
2023-06-23Fix return check of bn_hex2bn_cbs()tb1-3/+3
It returns a length, not a Boolean, so check for 0 explicitly. This is purely cosmetic. ok jsing
2023-06-23typo: hexidecimal -> hexadecimaltb1-2/+2
2023-06-23Remove some redundant parenthesestb1-17/+17
This file is already enough of an eyesore without them.
2023-06-23Revert previous, not all platforms allow compilingotto2-37/+4
__builtin_return_address(a) with a != 0.
2023-06-22symbols: Tweak this test so it works with -j Ntb1-6/+4
2023-06-22Allow to ask for deeper callers for leak reports using malloc options.otto2-4/+37
ok deraadt@
2023-06-21Provide optimised bn_clzw() for aarch64.jsing1-1/+15
2023-06-21Provide and use bn_clzw() in place of bn_word_clz().jsing3-5/+15
On some architectures, we can provide an optimised (often single instruction) count-leading-zero implementation. In order to do this effectively, provide bn_clzw() as a static inline that can be replaced by an architecture specific version. The default implementation defers to the bn_word_clz() function (which may also be architecture specific). ok tb@
2023-06-21Make BN_num_bits() independent of bn->top.jsing5-33/+74
Provide bn_bitsize(), which performs a constant time scan of a BN in order to determine the bit size of the BN value. Use this for BN_num_bits() such that it is no longer dependent on the bn->top value. ok tb@
2023-06-21Add tests for BN_sqr() corner cases.jsing1-1/+81
Test BN_sqr() with a newly allocated BN, a BN explicitly set to zero and small values that fit in a single BN_ULONG.
2023-06-21Add BN_cmp()/BN_ucmp() tests with zero padded inputs.jsing1-1/+25
Currently BN_hex2bn() removes the leading zeros, however this will not be the case in the future.
2023-06-21Add a BN_num_bits() with zero padded input.jsing1-4/+13
Currently BN_hex2bn() removes the leading zeros, however this will not be the case in the future.
2023-06-20Consolidate elliptic curve cofactor handlingtb1-49/+41
The various checks of the cofactor to be set in EC_GROUP_set_generator() are a bit all over the place. Move them into a single function and clean things up a little. Instead of calculating directly with the cofactor member of the group, use a temporary variable and copy this variable only if all tests passed. In cryptographic contexts the cofactor almost always fits if not into a single byte then into a word, so copying is cheap. Also streamline the computations a bit and remove some binary curve contortions. ok jsing
2023-06-20Improve certificate version checks in x509v3_cache_extensions()tb1-4/+11
Only allow version v1-v3, disallow issuerUID and subjectUID in v1 certs and require that if X509v3 extensions are present that the cert be v3. Initial diff from job ok job jsing
2023-06-20Rename all occurrences of e in this file to enginetb1-15/+15
Requested by jsing
2023-06-20Rename int_ctx_new() into evp_pkey_ctx_new()tb1-4/+4
int_ctx_new() is a bad, generic, nondescriptive name. requested by jsing
2023-06-20Clean up and fix int_ctx_new()tb1-34/+30
Compare explicitly against NULL, ensure the engine is always finished on error, switch to using calloc() instead of malloc() + forgetting to set some members to 0, use EVP_PKEY_up_ref() and also use pkey_ctx instead of ret for the newly created EVP_PKEY_CTX. ok jsing
2023-06-20Clean up EVP_PKEY_CTX_meth_dup()tb1-22/+19
Explicitly check against NULL, replace malloc() plus manual zeroing with calloc(). Use EVP_PKEY_up_ref() rather than handrolling it and use a more normal error idiom. There still seems to be a bug in here in that the ENGINE's refcount isn't bumped, but that will be investigated and fixed separately. ok jsing
2023-06-20Fix copy-paste errortb1-2/+2
2023-06-20Add regress coverage for BN_num_bits()jsing1-1/+35
2023-06-19Make enginetest work with disabled engine supporttb1-1/+10
2023-06-19Fix GOST test with disabled enginetb1-1/+5
2023-06-19Properly guard ENGINE usage with !OPENSSL_NO_ENGINEtb1-1/+5
2023-06-19Dedoxigenize ecdsa.htb1-133/+5
These functions are properly documented and upcoming surgery in here is going to be tricky enough without having to navigate around this noise. No code change.
2023-06-18Turns out EC_KEY_METHOD_new() has dup built in...tb1-21/+3
... because RSA_meth_new() doesn't. So we can fortunately lose a few lines added in the previous commit. Three cheers for the masters of inconsistency. ok jsing
2023-06-18tls_signer: reinstate the default EC_KEY methodstb1-2/+29
Previously, we would set the ECDSA_METHOD on the EC_KEY, which, by way of lovely indirection in our three crypto/ec* directories ended up having no effect on the default methods. Now that we set a new EC_KEY_METHOD, we need to make sure we still have the other handlers that we might need. Like so many things that were made opaque in the 1.1 re"design", the accessors were written without actual application code in mind. In particular, EC_KEY_METHOD lacks a dup(). This means we get to fetch the default methods with getters and then set them again on the new method. This is particularly awesome because once someone adds a new method to the opaque struct, all applications will have to adapt and do a get/set dance. So far this is very reminiscent of PostgreSQL with BIO_meth_* https://github.com/postgres/postgres/blob/a14e75eb0b6a73821e0d66c0d407372ec8376105/src/interfaces/libpq/fe-secure-openssl.c#L1921-L1928 Only it's worse here because someone wanted to be smart and save a few public functions, so we have to use getters that get several functions at once. Which in turn means we need to have function pointers with the precise signatures which are part of the struct that was made opaque. We will add a EC_KEY_METHOD_dup() in the next bump, but for now this is the best fix we can have. Whenever you think you've seen the worst turds in this code base, you find another one that could serve as an exemplar. ok jsing op
2023-06-18Switch tls_ecdsa_do_sign() to EC_KEY_get_ex_data()tb1-3/+3
Since libtls now sets the ex_data with EC_KEY_set_ex_data(), the do_sign() callback needs to have a matching change. ok jsing op