summaryrefslogtreecommitdiff
path: root/src (unfollow)
Commit message (Collapse)AuthorFilesLines
2024-01-10X509_TRUST: group together all trust_*() functionstb1-33/+30
Now they are next to the trstandard[] table and listed in the order they appear in the table.
2024-01-10X509_TRUST: hoist trust_compat() to the other end of the filetb1-12/+11
2024-01-10X509_TRUST: start shuffling some code aroundtb1-32/+31
Hoist obj_trust() to the top and move the static default_trust() next to its setter.
2024-01-10Rework X509_STORE_CTX_set_{purpose,trust}()tb1-36/+35
Split the two codepaths in x509_vfy_purpose_inherit() into its two callers. What remains is gross, but at least a reader has a chance of following all this nonsense without leaving a significant amount of hair behind. In short, purpose and trust are only overridden if they're not already set. Otherwise silently ignore valid purpose and trust identifiers that were passed in and succeed. Error on almost all invalid trust or purpose ids, except 0, because... well... who knows, really? ok jsing
2024-01-10Inline rsa_is_pss() and rsa_pkey_is_pss()tb1-11/+9
It's more explicit and not that much longer. ok jsing
2024-01-10Drop an unnecessary casttb1-2/+2
from jsing
2024-01-10Fix print_fp()tb1-7/+5
The callback-based printing needs to die. But first BIO_set() will die. We have a FILE *. We have fprintf(). No need to use a static BIO to dump error codes to said stream. This basically undoes an unrelated change of "Move crpytlib.h prior bio.h" from 19 years ago (OpenSSL 25a66ee3). Except we don't cast and check len. ok jsing (who had a nearly identical diff)
2024-01-09Fix copy-paste error that broke openssl-ruby and openssl regresstb1-2/+2
Noticed by anton
2024-01-08Disable X509_STORE_CTX_purpose_inherit()tb1-23/+22
Nothing uses this function, except two internal callers. So split its guts temporarily into a helper function and disable the gross general case. The internal helper can be simplified by observing that def_purpose == 0: Overriding 0 by 0 doesn't do anything, so drop that bit. Rename ptmp into purp, and inline X509_PURPOSE_get_by_id(), i.e., make appropriate checks and subtract X509_PURPOSE_MIN. The fallback to X509_PURPOSE_get_by_id(0) will always fail since X509_PURPOSE_MIN == 1. So ditch that call. In particular, X509_STORE_CTX_set_purpose(ctx, X509_PURPOSE_ANY) fails in current because of this. That's nonsense. So remove the purp->trust == X509_TRUST_DEFAULT check as only change of behavior. This matches what OpenSSL do nowadays. They now set def_purpose = purpose if purpose != 0 and def_purpose == 0, so in all real-world uses of this function they will just fetch the same purpose again and do not check for default trust the second time around. Finally, X509_TRUST_get_by_id() is only used to ensure that a non-zero (or overridden) trust is between X509_TRUST_MIN and X509_TRUST_MAX. So expand that into its explicit form. ok jsing
2024-01-08Inline X509_{TRUST,PUPROSE}_set() in their only callerstb1-3/+16
They are now unused and will join the exodus to the attic in the next bump. ok jsing
2024-01-08const correct aesni_{128,256}_cbc_hmac_sha1_ciphertb1-3/+3
2024-01-08Fix logic error (&& -> ||)tb1-2/+2
CID 477172
2024-01-07Garbage collect call to X509_TRUST_cleanup()tb1-2/+1
Since x509_trs.c r1.33, this is a noop.
2024-01-07Minor cleanup in X509_STORE_CTX_purpose_inherit()tb1-9/+10
Make a few checks against 0 explicit to reduce noise in an upcoming diff and tiny KNF tweaks.
2024-01-07purpose/trust: Improve comments about COUNT/MAX confusiontb2-4/+10
2024-01-07const-correct r4_hmac_md5_ciphertb1-2/+2
2024-01-07Convert the remaining legacy ciphers to C99 initializerstb5-76/+90
No change in the generated aarch64 assembly apart from line number changes. ok jsing
2024-01-07Improve EVP_CIPHER_{get,set}_asn1_iv()tb1-25/+26
Use iv_len for the variables storing the IV length, formerly l and j. Remove use of the unnecessary variable i and unindent the whole mess. Some return values are fishy. That will be addressed in subsequent commits. ok jsing
2024-01-07Remove X509_TRUST extensibilitytb1-102/+10
This is pretty much identical to the X509_PURPOSE case: remove the stack used for extending and overriding the trust table and make X509_TRUST_add() always fail. Simplify some other bits accordingly. ok jsing
2024-01-06Zap some more CRL method thingstb1-10/+1
2024-01-06Remove X509_PURPOSE_cleanup() call in OPENSSL_cleanup()tb1-2/+1
Since x509_purp.c r1.34 this is a noop since there is nothing to clean up anymore. Remove the last caller.
2024-01-06Remove X509_CRL_METHOD internalstb3-92/+25
Another complication of dubious value that nobody's ever used. crl_init(), crl_free() and the meth_data are dead weight, as are their accessors. Inline def_crl_verify() in X509_CRL_verify() so that the latter becomes the trivial wrapper of ASN1_item_verify() that one would expect it to be. It is quite unclear what kind of customization would make sense here... def_crl_lookup() is renamed into crl_lookup() and its two callers, X509_CRL_lookup_by_{serial,cert}(), are moved below it so that we don't need a prototype. ok jsing
2024-01-06Remove X509_PURPOSE extensibilitytb1-112/+10
Another bit of global state without lock protection. The by now familiar complications of a stack to make this user configurable, which, of course, no one ever did. The table is not currently const, and the API exposes its entries directly, so anyone can modify it. This fits very well with the safety guarantees of Rust's 'static lifetime, which is how rust-openssl exposes it (for no good reason). Remove the stack and make the X509_PURPOSE_add() API always fail. Simplify the other bits accordingly. In addition, this API inflicts the charming difference between purpose identifiers and purpose indexes (the former minus one) onto the user. Neither of the two obvious solutions to avoid this trap seems to have crossed the implementer's mind. ok jsing
2024-01-05EVP_PKEY_asn1_find_str() tweakstb1-4/+3
Switch i to a size_t and improve a flag check. Part of an earlier diff that was ok jsing but were lost when I reworked the diff.
2024-01-05evp_key.c: Remove more unnecessary parenthesestb1-7/+6
2024-01-05Minor tweaks in EVP_read_pw_string_min()tb1-4/+4
Remove unnecessary parentheses and use a better place to break an overlong line.
2024-01-05Plug a leak in EVP_read_pw_string_min()tb1-9/+14
Use an error exit that frees the ui in case the UI_add_* fail. Also add a few empty lines for readability. ok joshua
2024-01-04Disable EVP_PKEY_meth_* extensibilitytb1-46/+7
This removes the global pkey_app_methods stack that was never cleaned up and makes EVP_PKEY_meth_add0() always fail and push an error on the stack. EVP_PKEY_meth_find() can now walk the list of PKEY_METHODs forward and things become a bit cleaner. It's still all way more complicated than it needs to be... ok jsing
2024-01-04Remove last external call to EVP_PKEY_meth_find()tb1-5/+6
In order to determine whether GOST is properly enabled, libssl has various weird dances. In this specific case, it calls EVP_PKEY_meth_find() to see whether the relevant cipher is around. Check the same thing with an #ifdef instead. ok jsing
2024-01-04Remove unused app_data from EVP_CIPHERtb15-84/+15
The EVP_CIPHER structs are static const data that the library returns when you call EVP_aes_128_cbc(), for example. It makes no sense whatsoever to hang user data off such a struct, but it's been there since forever. ok jsing
2024-01-04Clean up EVP_PKEY_asn1_get0_info() a bittb1-14/+16
Use better variable names without silly p prefix and use explicit checks against NULL.
2024-01-04Clean up EVP_PKEY_asn1_find_str()tb1-9/+18
Use slightly better argument and variable names, do not pointlessly try to match a string of negative length < -1, use a size_t for the strlen() and preserve the logic that allows lookup by a string fragment rather than a full string. ok jsing
2024-01-04Simplify EVP_PKEY_asn1_find()tb1-33/+9
EVP_PKEY_asn1_find() finds the EVP_PKEY_ASN1_METHOD underlying the method or alias with nid (or, rather, pkey_id) passed in. Now that we have the base method stored in a pointer, we can return that method after a simple lookup of said nid (or, rather, pkey_id). ok jsing
2024-01-04Replace .pkey_base_id with a .base_method pointertb11-32/+32
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
2024-01-04Neuter the remainder of the ameth libtb1-65/+13
The few pieces of the ameth lib that will stay in libcrypto were moved to p_lib.c recently. The functions that still are in ameth_lib.c will be removed in the next major bump. With disabled EVP_PKEY_asn1_add{0,_alias}() API they are completely useless now and they are getting in the way of more ameth surgery. Rip out their guts and turn them into stubs that do nothing but push an error onto the stack. ok jsing
2024-01-04Split ameth arrays into individual methodstb4-149/+150
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
2024-01-04Improve length checks for oiv and ivtb1-4/+5
There are two unsigned char arrays of size EVP_MAX_IV_LENGTH to store the IVs of block ciphers. In most modes, only iv is used, but in some modes iv is modified and oiv is used to store the original IV. At the moment nothing enforces that they are of the same length. Therefore make sure the correct one or both are checked before writing to or reading from them. ok miod
2024-01-03Improve order in ancient CMS helperstb1-25/+25
First came EVP_CIPHER_param_to_asn1() which wraps EVP_CIPHER_set_asn1_iv() which was implemented last. Then came EVP_CIPHER_asn1_to_param() wrapping EVP_CIPHER_get_asn1_iv(). Move each param function below the iv function it wraps.
2024-01-02Move a t to the right place in a commenttb1-2/+2
2024-01-02Match struct order for the EVP_CIPHER_CTX accessorstb1-69/+73
This isn't great since the struct is ordered in about the silliest way imaginable, but it is better than it was before. Bringing order into this mess is harder than solving a Rubik's cube.
2024-01-02Move down EVP_CIPHER_CTX accessors expose EVP_CIPHER internalstb1-38/+42
These confusingly named getters were added "for convenience" in 1.1. They fit best next to the EVP_CIPHER API.
2024-01-02Move the trivial EVP_CIPHER getters downtb1-31/+35
They are now below the CMS ASN.1 IV stuff, but above the EVP_CIPHER_meth* API, which are setters, in a way.
2024-01-02Simplify EVP_CIPHER_{asn1_to_param,parma_to_asn1}()tb1-17/+13
There's no need for a ret variable and else if/else
2024-01-02Move the EVP_CIPHER API that only exists for CMS/legacy a bit downtb1-121/+125
2024-01-02sm4: more NULL misspellingstb1-4/+4
2024-01-02Two spellings of key length are enoughtb1-6/+7
The API is called EVP_CIPHER_CTX_set_key_length() it has an argument called keylen and, the EVP_CIPHER_CTX's member is called key_len. One of the three is trivial to adjust, so do it.
2024-01-02Rename the poor outlier EVP_CIPHER *e into *ciphertb1-3/+3
2024-01-02Better variable names in EVP_CIPHER_type()tb1-7/+8
The EVP_CIPHER *ctx (yes) is renamed to cipher, otmp becomes an aobj. Change two !ptr to ptr == NULL checks.
2024-01-02Consistently use ctx for an EVP_CIPHER_CTXtb1-36/+36
Not c (which is most of the time an EVP_CIPHER) or a (?!).
2024-01-01Fix bounds check in EVP_PKEY_CTX_get_keygen_info()tb1-2/+2
Replace > with >= for the upper array bound to disallow a 4 byte overread. For RSA you can read the padding mode and for DH past the DH_PKEY_CTX. Unfortunately, Ruby thought it important to use this, so we can't kill it easily. ok miod