summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/dsa (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Zap trailing whitespace in dsa.htb2025-03-011-7/+7
|
* dsa_gen: convert to BN_MONT_CTX_create()tb2025-02-131-5/+2
| | | | | | | This can now be a single call before the BN_MONT_CTX is actually used rather than two calls separated by 170 lines. ok jsing
* Remove #error if OPENSSL_NO_FOO is definedtb2025-01-251-5/+1
| | | | discussed with jsing
* Make the DSS_prime_checks macro internaltb2024-12-052-11/+12
| | | | | | | | Rename it to DSA_prime_checks and add an XXX comment mentioning that we could reduce the number of rounds thanks to BPSW. There are no plans of changing that as DSA is on its way out. discussed with miod
* Remove the undocumented DSA_is_prime() macrotb2024-12-051-3/+1
| | | | | | It aliases BN_is_prime(), which was removed in April 2023. makes sense to miod
* Remove weird pad member that was never set to zero after malloc() sotb2024-11-291-4/+1
| | | | | | the weird thing it was supposed to be doing couldn't possibly work. ok jsing
* Drop a useless cast in pkey_dsa_ctrl()tb2024-10-191-2/+2
| | | | ok joshua jsing
* replace strtol(3) usage with strtonum(3); idea/ok/tweaks tb@op2024-08-261-23/+10
|
* Hide global _it symbols in dsa.hbeck2024-07-081-1/+4
| | | | ok tb@
* libcrypto: constify most error string tablestb2024-06-241-5/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | These constitute the bulk of the remaining global mutable state in libcrypto. This commit moves most of them into data.rel.ro, leaving out ERR_str_{functs,libraries,reasons} (which require a slightly different approach) and SYS_str_reasons which is populated on startup. The main observation is that if ERR_load_strings() is called with a 0 lib argument, the ERR_STRING_DATA argument is not actually modified. We could use this fact to cast away const on the caller side and be done with it. We can make this cleaner by adding a helper ERR_load_const_strings() which explicitly avoids the assignment to str->error overriding the error code already set in the table. In order for this to work, we need to sprinkle some const in err/err.c. CMS called ERR_load_strings() with non-0 lib argument, but this didn't actually modify the error data since it ored in the value already stored in the table. Annoyingly, we need to cast const away once, namely in the call to lh_insert() in int_err_set_item(). Fixing this would require changing the public API and is going to be tricky since it requires that the LHASH_DOALL_FN_* types adjust. ok jsing
* Add space after commastb2024-05-191-3/+3
|
* KNF for dh_err and dsa_errtb2024-05-191-26/+24
|
* Remove unused DSA methodstb2024-05-114-53/+21
| | | | | | | There are no accessors to set them, so this has been involved in a bunch of dead logic ever since we made DSA opaque a few years ago. ok jsing
* Inline dsa_builtin_keygen() in DSA_generate_key()tb2024-05-101-12/+6
| | | | ok djm
* Make the openssl_dsa_meth static consttb2024-05-091-2/+2
|
* Move openssl_dsa_meth below the methods it usestb2024-05-091-25/+17
| | | | no functional change
* And here go {,EC}DSA_SIG_ittb2024-04-151-2/+2
| | | | ok jsing
* Error check X509_ALGOR_set0() in {dsa,ec}_pkey_ctrl()tb2024-04-131-4/+8
| | | | | | | | | | These are four versions of near identical code: PKCS#7 and CMS controls for DSA and EC. The checks are rather incomplete and should probably be merged somehow (see the Ed25519 version in ecx_methods(). For now, only replace X509_ALGOR_set0() with its internal by_nid() version and, while there, spell NULL correctly. ok jca
* Unwrap a line for consistency with other copy-pasted versionstb2024-04-131-3/+2
|
* Use dsa for DSA and dh for DHtb2024-03-271-88/+90
| | | | | This unifies variable names and does some other cleanup. Only change in generated assembly is line number changes.
* Unify *_up_ref() implementationstb2024-03-271-3/+2
| | | | | | No need for an inconsistently named local variable and a ternary operator. ok jsing
* Remove DSA_generate_parameterstb2024-03-022-29/+2
| | | | | | | | | | | This was deprecated in 0.9.8 and used until recently by rust-openssl and by keynote (keynote has the excuse that it was written before the deprecation). Fortunately Paul Kehrer fixed this in rust-openssl, so we can garbage collect this turd. (It was replaced with the less ergonomic DSA_generate_parameters_ex() to expose a new fancy way of displaying dots, stars and pluses on key generation). ok jsing
* Replace .pkey_base_id with a .base_method pointertb2024-01-041-6/+6
| | | | | | | | | | | | | | | | Every EVP_PKEY_ASN1_METHOD is either an ASN.1 method or an alias. As such it resolves to an underlying ASN.1 method (in one step). This information can be stored in a base_method pointer in allusion to the pkey_base_id, which is the name for the nid (aka pkey_id aka type) of the underlying method. For an ASN.1 method, the base method is itself, so the base method is set as a pointer to itself. For an alias it is of course a pointer to the underlying method. Then obviously ameth->pkey_base_id is the same as ameth->base_method->pkey_id, so rework all ASN.1 methods to follow that. ok jsing
* Split ameth arrays into individual methodstb2024-01-041-61/+57
| | | | | | | | | | | | For some reason DSA, GOST, and RSA had their ASN.1 methods stored in an array. This is clumsy and the only benefit is that one saves a few externs in p_lib.c. They were also arranged by ascending NID because of bsearch() madness. Split them up and arrange the methods by name, which is much saner and simpler. ok jsing
* Rework pkey_das_paramgen()tb2023-12-281-16/+21
| | | | | | | | | Another copy-paste-then-tweak-and-diverge version of the same old thing. Fix it the same way as pkey_rsa_paramgen() and pkey_dh_paramgen(). The callbacks are initialized at the top and the weird error checking is turned into something much simpler. ok jsing
* Rework pkey_dsa_keygen()tb2023-12-281-9/+18
| | | | | | | | Very similar to pkey_dh_keygen(): single exit and hold on to an extra reference by calling EVP_PKEY_set1_DSA() instead of assigning the DSA to the pkey. "Fixes" another leak that Coverity missed. ok jsing
* Ignore ENGINE at the API boundarytb2023-11-292-5/+3
| | | | | | | | This removes the remaining ENGINE members from various internal structs and functions. Any ENGINE passed into a public API is now completely ignored functions returning an ENGINE always return NULL. ok jsing
* Unifdef OPENSSL_NO_ENGINE in libcryptotb2023-11-191-29/+1
| | | | | | | This is mechanical apart from a few manual edits to avoid doubled empty lines. ok jsing
* Drop silly int_ prefix from _free() and _size()tb2023-08-121-5/+5
|
* Free {priv,pub}_key before assigning to ittb2023-08-121-1/+4
| | | | | | | | While it isn't the case for the default implementations, custom DH and DSA methods could conceivably populate private and public keys, which in turn would result in leaks in the pub/priv decode methods. ok jsing
* Readability tweak for key parameters in DSAtb2023-08-121-2/+2
| | | | ok jsing
* Simplify and unify missing_parameters() for DH and DSAtb2023-08-121-6/+3
| | | | ok jsing
* Convert {DH,DSA}_new_method() to using calloc()tb2023-08-121-40/+25
| | | | | | | | | | | | | | | Due to OPENSSL_NO_ENGINE the engine member of dh and dsa is currently uninitialized. As a consequence, {DH,DSA}_get0_engine() will return a garbage pointer, which is particularly bad because the only reason we kept them in the first place is that they are used by some software... A side effect of freeing with {DH,DSA}_free() instead of a hand-rolled version is that we may call ->meth->finish() before ->meth->init() was called. We need a NULL check for ->meth to be on the safe side in case we should need to bring ENGINE back. with nits from djm ok deraadt djm
* Improve variable names in {dh,dsa}_{pub,priv}_{de,en}code()tb2023-08-111-57/+57
| | | | | | | | Use aint for the ASN1_INTEGER holding the key and astr for the ASN1_STRING holding the parameters. This frees up key and params for their DER encoded versions, matching the naming we use elsewhere much more closely. ok jsing
* Use params{,_len} in {dh,dsa}_params_{en,de}code()tb2023-08-111-5/+5
|
* Use key/key_len in old_dsa_priv_{en,de}code()tb2023-08-111-5/+5
| | | | ok jsing
* Add back an empty line that I didn't really want to removetb2023-08-111-1/+2
|
* Align dh and dsa decoding functions with encodingtb2023-08-111-79/+94
| | | | | | | | | This adds some missing error checks and fixes and unifies error codes which were (as usual) all over the place or just plain nonsense. Use an auxiliary variable for d2i invocations even though it is not really needed here. ok jsing
* Convert {dh,dsa}_{pub,priv}_encode() to single exittb2023-08-101-42/+47
| | | | | | | Use the same variable names throughout these functions and unify them some more. ok jsing
* Clean up {dh,dsa}_pub_encode()tb2023-08-101-19/+26
| | | | | | | This brings these two messy functions into more usual shape. There is a lot more that can be done in here. It is a step in the right direction. ok jsing
* Various fixes in {dh,dsa}_priv_encode()tb2023-08-101-19/+24
| | | | | | | | | | Avoid creating an ASN1_STRING with negative length, set type, data and length via ASN1_STRING_type_new() and ASN1_STRING_set0() instead of doing this manually. Check return value for i2d_ASN1_INTEGER() and use an intermediate ASN1_OBJECT instead of nested function calls. Finally, clear sensitive data with freezero(). ok jsing
* Make the bn_rand_interval() API a bit more ergonomictb2023-08-032-5/+5
| | | | | | | | | | | | | | | | | | 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
* hide symbols in dsabeck2023-07-088-8/+73
| | | | ok tb@
* Mop up remaining uses of ASN1_bn_print()tb2023-07-071-48/+13
| | | | | | | This removes lots of silly buffers and will allow us to make this API go away. ok jsing
* Wire up truncated SHA-2, SHA-3 and related thingstb2023-04-251-1/+6
| | | | from jsing
* Bring includes into canonical ordertb2023-04-181-4/+4
| | | | Requested by jsing
* Move some includes out of OPENSSL_NO_DEPRECATEDtb2023-04-181-3/+1
| | | | | | | | | | | | | Some headers were included conditionally on OPENSSL_NO_DEPRECATED in hopes that eventually the mess of everything includes everything will magically resolve itself. Of course everyone would end up building openssl with OPENSSL_NO_DEPRECATED over time... Right. Surprisingly, the ecosystem has come to rely on these implicit inclusions, so about two dozen ports would fail to build because of this. Patching this would be easy but really not worth the effort. ok jsing
* Remove files that definitely contain no code anymoretb2023-04-131-73/+0
| | | | (experts disagree whether they ever did)
* Move DSA_generate_parameters() from dsa_depr.c to dsa_gen.ctb2023-04-132-21/+23
| | | | Discussed with jsing
* Move a few functions out of OPENSSL_NO_DEPRECATEDtb2023-04-092-7/+3
| | | | | | | | | | | | | | | | | | | | | | | | Geoff Thorpe added OPENSSL_NO_DEPRECATED nearly two decades ago. The hope was that at some point some functions can be dropped. Most of the functions marked deprecated are actually unused nowadays but unfortunately some of them are still used in the ecosystem. Move them out of OPENSSL_NO_DEPRECATED so we can define it without breaking the consumers in the next bump. ERR_remove_state() is still used by a dozen or so ports. This isn't a big deal since it is just a stupid wrapper for the not quite as deprecated ERR_remove_thread_state(). It's not worth patching these ports. Annoyingly, {DH,DSA}_generate_parameters() and RSA_generate_key() are still used. They "make use" of the old-style BN_GENCB callback, which is therefore more difficult to remove - in case you don't know know: that's the thing responsible for printing pretty '.', '+' and '*' when you generate keys. Most annoyingly, DH_generate_parameters() was added to rust-openssl in 2020 for "advanced DH support". This is very unfortunate since cargo bundles a rust-openssl and updates it only every few years or so. As a consequence we're going to be stuck with this nonsense for a good while. ok beck jsing