summaryrefslogtreecommitdiff
path: root/lib/libcrypto/ecdsa
AgeCommit message (Collapse)Author
2024-04-15And here go {,EC}DSA_SIG_itTheo Buehler
ok jsing
2023-08-08Remove ECDSA nonce padding kludgeTheo Buehler
This was a workaround due to the historically non-constant time scalar multiplication in the EC code. Since Brumley and Tuveri implemented the Montgomery ladder, this is no longer useful and should have been removed a long time ago, as it now does more harm than good. Keep the preallocations as they still help hiding some timing info. ok jsing
2023-08-03Make the bn_rand_interval() API a bit more ergonomicTheo Buehler
Provide bn_rand_in_range() which is a slightly tweaked version of what was previously called bn_rand_range(). The way bn_rand_range() is called in libcrypto, the lower bound is always expressible as a word. In fact, most of the time it is 1, the DH code uses a 2, the MR tests in BPSW use 3 and an exceptinally high number appears in the Tonelli-Shanks implementation where we use 32. Converting these lower bounds to BIGNUMs on the call site is annoying so let bn_rand_interval() do that internally and route that through bn_rand_in_range(). This way we can avoid using BN_sub_word(). Adjust the bn_isqrt() test to use bn_rand_in_range() since that's the only caller that uses actual BIGNUMs as lower bounds. ok jsing
2023-07-28Stop including ecdsa.h and ecdh.h internallyTheo Buehler
These headers are now reduced to #include <openssl/ec.h> and are provided for compatiblity only. There's no point in using them. At the same time garbage collect the last uses of OPENSSL_NO_{ECDSA,ECDH} in our tree. ok jsing
2023-07-28Remove some unneeded includes from ecdsa.hTheo Buehler
2023-07-28Merge ecdsa.h into ec.hTheo Buehler
Move the remaining ECDSA API into ec.h to match OpenSSL 1.1's interface better. In particular, the EC_KEY sign and verify method accessors are moved to the right header. Whether the rest of the ECDSA stuff belongs there is debatable, but that was upstream's choice. ok jsing
2023-07-28Remove ECDSA_METHODTheo Buehler
After smtpd (in base) and libtls finally switched from ECDSA_METHOD to EC_KEY_METHOD, much of the ECDSA_METHOD code was neutered. Remove the remaining public API as well as numerous tentacles into ENGINE. ok jsing
2023-07-28Remove ecs_err.cTheo Buehler
These error codes have been unused for a while, so the public API loading them is pointless. ok jsing
2023-07-28Place public ECDSA API next to the internal methodsTheo Buehler
It is hard to remember that ECDSA_do_{sign,verify}() call ecdsa_sign_sig(). Especially since the distinction to ECDSA_{sign,verify}() isn't clear from the names. To add to the confusion, the public API is ordered differently than the methods they call. So in this case it seems tidier to place the public API next to the methods. ok jsing
2023-07-28Remove ECDSA_{do_,}sign_ex()Theo Buehler
There is no reason to keep these. It is cleaner to keep ECDSA_sign_setup() but remove the logic for passed-in kinv and r. Refuse to cooperate as far as possible. Someone could still implement their own versions of ECDSA_{do_,}_sign_ex() and ECDSA_sign_setup() by leveraging EC_KEY_METHOD_get_sign() and building their own wrappers. We can't make such an implementation of ECDSA_sign_setup() fail, but we make the actual signing fail since we no longer "do the right thing". ok jsing
2023-07-28Make extended ECDSA signing routines internalTheo Buehler
ECDSA_sign_setup() permits precomputing the values of the inverse of the random k and the corresponding r. These can then be fed into the signing routines ECDSA_{do_,}sign_ex() multiple times if needed. This is not a great idea and the interface adds a lot of unwanted complexity. Not to mention that nothing ever used this correctly - if s works out to 0, a special error code is thrown requesting that the caller provide new kinv and r values. Unsurprisingly, nobody ever checked for that special error code. ok jsing This commit marks the start of a libcrypto major bump. Do not build the tree until I bumped the shlib_version and synced file sets (in about 35 commits).
2023-07-10Rename EC_KEY from r to key like in the rest of the fileTheo Buehler
2023-07-07Hide symbols in hkdf, evp, err, ecdsa, and ecBob Beck
(part 2 of commit) ok jsing@
2023-07-05Mop up last uses of ECDHerror() and ECDSAerror()Theo Buehler
ok jsing
2023-07-05One more ECDSAerror goes.Theo Buehler
2023-07-05ECDHerror() and ECDSAerror will go awayTheo Buehler
Move some trivial ones to ECerror(). discussed with jsing
2023-07-05Drop an incorrect part from a commentTheo Buehler
2023-07-05Missing . in commentTheo Buehler
2023-07-05Fix #includesTheo Buehler
2023-07-05Remove local prototypes for public API (?!)Theo Buehler
2023-07-05Improve BN_bn2bin() error check for readabilityTheo Buehler
2023-07-05Move ECDSA_size() to a more sensible place in this fileTheo Buehler
2023-07-05Merge ECDSA code that will stay into ecdsa.cTheo Buehler
discussed with jsing
2023-07-05Rename ecs_local.h into ecdsa_local.hTheo Buehler
2023-07-05Make variables in prototypes match function declarationsTheo Buehler
2023-07-05Drop useless ossl_ prefixesTheo Buehler
discussed with jsing
2023-07-04Avoid outputting invalid signaturesTheo Buehler
The caller can provide an r which will be added to the ECDSA_SIG unchecked. This can happen via ECDSA_{,do_}sign_ex() or ECDSA_sign_setup() or else via a custom sign_sig() handler. Therefore add a check that it is in the bounds required. Since k was long thrown away, there's no way to check kinv, so it needs to be trusted. Misdesigned APIs that will output garbage everywhere... ok jsing
2023-07-04Clean up ECDSA verificationTheo Buehler
Use variable names that correspond more closely to the standard. Use an additional variable for s^-1 for readability. Annotate the code with the corresponding steps from FIPS 186-5. ok jsing
2023-07-04ECDSA signing: annotate code with steps corresponding to FIPS 185-6.Theo Buehler
ok jsing
2023-07-04Extract private key and group order in s computationTheo Buehler
This pushes a few variables no longer needed in ossl_ecdsa_sign_sig() into ecdsa_compute_s() separating API logic and pure computation a bit more. ok beck
2023-07-04Use key for the EC_KEY everywhereTheo Buehler
2023-07-04Some more consistency in variable namesTheo Buehler
2023-07-04Normalize ECDSA_SIG to be sig everywhereTheo Buehler
2023-07-04Normalize on digest and digest_len rather than dgst dlen dgstlen, etc.Theo Buehler
2023-07-04Rework ecdsa_prepare_digest()Theo Buehler
Make it take an EC_KEY instead of a group order in preparation for further cleanup. Rename m into e to match the standard better. Also buy some vowels for jsing. ok beck jsing
2023-07-04Factor the computation of ECDSA s into a functionTheo Buehler
ossl_ecdsa_sign_sig() is already complicated enough. The math bit is entirely self contained and does not need to obfuscate control flow and logic. with feedback from and ok jsing
2023-07-03sign_sig: drop ckinvTheo Buehler
The only reason ckinv exists is to be able to avoid a copy. This copy leaks some timing info, that will be mitigated in a subsequent step. It is an unused or at least uncommonly used codepath. ok jsing
2023-07-03Rework the logic in ECDSA sign_sig()Theo Buehler
If the caller supplied both kinv and r, we don't loop but rather throw an undocumented error code that no one uses, which is intended to tell the caller to run ECDSA_sign_setup() and try again. Use a boolean that indicates this situation so that the logic becomes a bit more transparent. ok jsing
2023-07-03sign_sig: test on assignmentTheo Buehler
2023-07-03sign_setup: split another check into twoTheo Buehler
2023-07-03Split range checks for ECDSA r and ECDSA sTheo Buehler
requested by jsing
2023-07-03Switch a couple of test from ucmp to cmpTheo Buehler
This is confusing, as both sides involved should be unsigned. The ec code is undecided on whether the group order can be negative. It should never be, so lets see what happen with this slightly stricter check. discussed with jsing
2023-07-03ossl_ecdsa_verify_sig(): simplify range checksTheo Buehler
The checks whether r and s lie in the interval [1, order) were a bit uglier than necessary. Clean this up. ok beck jsing
2023-07-03List variables in a somewhat more sensible orderTheo Buehler
2023-07-03In ossl_ecdsa_verify_sig() use BN_CTX more idiomaticallyTheo Buehler
ok beck jsing
2023-07-03Split a bunch of unrelated checksTheo Buehler
ok beck jsing
2023-07-03Make ossl_ecdsa_verify_sig() single exitTheo Buehler
ok beck jsing
2023-07-03Switch ossl_ecdsa_verify() to timingsafe_memcmp()Theo Buehler
Requested by jsing
2023-07-03Streamline ossl_ecdsa_verify()Theo Buehler
Make it single exit and use API more idiomatically and some other cosmetics. ok beck jsing
2023-07-03Switch ECDSA code to using EC_GROUP_get0_order()Theo Buehler
ok jsing