summaryrefslogtreecommitdiff
path: root/lib/libcrypto
AgeCommit message (Collapse)Author
2023-11-16drop some duplicate statements about macrosIngo Schwarze
2023-11-16fix wrong macroIngo Schwarze
2023-11-16delete lots of stuff that no longer existsIngo Schwarze
2023-11-16fix typo: exdata -> ex_dataIngo Schwarze
2023-11-16Minimal fix to unbreak OPENSSL_{gmtime,timegm}(3)Theo Buehler
I was told not to look since it will magically get fixed. Fine. I'd still have expected a minimal amount of care so that the manpage isn't totally dysfunctional and missing text in the right places. Sigh.
2023-11-15Drop some unnecessary parenthesesTheo Buehler
2023-11-15Shuffle getters and adders down a bitTheo Buehler
These use static helper functions which don't need prototypes this way.
2023-11-13Make X509_certificate_type() less badTheo Buehler
This converts to proper single exit and undoes a number of unnecessarily silly muppet antics. ok beck
2023-11-13Garbage collect an incoherent export crypto checkTheo Buehler
Contrast "#define EVP_PKT_EXP 0x1000 /* <= 512 bit key */" with the diff: - /* /8 because it's 1024 bits we look for, not bytes */ - if (EVP_PKEY_size(pk) <= 1024 / 8) - ret |= EVP_PKT_EXP; EVP_PKT_EXP will be nuked at the next opportunity. discussed with jsing
2023-11-13Use a sensible variable name (i.e. nid) instead of i for a NIDTheo Buehler
2023-11-13Use X509_get_signature_nid() instead of inlining itTheo Buehler
ok beck jsing
2023-11-13X509_certificate_type() needs to know about RSA-PSSTheo Buehler
This doesn't do much right now, but is part of the tangle that is adding RSA-PSS support. ok beck jsing
2023-11-13Prepare to expose OPENSSL_gmtime and OPENSSL_timegm as publicBob Beck
This matches when BoringSSL has done, and allows for getting rid of the dependency on system timegm() and gmtime() in libtls. which will make life easier for portable, and remove our dependency on the potentially very slow system versions. ok tb@ - tb will handle the minor bump bits and expose on the next minor bump CVS :----------------------------------------------------------------------
2023-11-13Eliminate the timegm(3) dependency in libcryptoTheo Buehler
timegm(3) is not available on some operating systems we support in portable. We currently use musl's implementation, for which gcc-13 decided to emit warnings (which seem incorrect in general and are irrelevant in this case anyway). Instead of patching this up and diverge from upstream, we can avoid reports about compiler warnings by simply not depending on this function. Rework the caching of notBefore and notAfter by replacing timegm(3) with asn1_time_tm_to_time_t(3). Also make this API properly error checkable since at the time x509v3_cache_extensions(3) is called, nothing is known about the cert, in particular not whether it isn't malformed one way or the other. suggested by and ok beck
2023-11-12split the Symbols.list up so that arch specific symbols do not end up everywhereRobert Nagy
ok tb@
2023-11-11Fix a few bugs in X509v3_asid_add*()Theo Buehler
These 'builder' functions, usually used together, can result in corrupt ASIdentifiers on failure. In general, no caller should ever try to recover from OpenSSL API failure. There are simply too many traps. We can still make an effort to leave the objects in unmodified state on failure. This is tricky because ownership transfer happens. Unfortunately a really clean version of this seems impossible, maybe a future iteration will bring improvements... The nasty bit here is that the caller of X509v3_asid_add_id_or_range() can't know from the return value whether ownership of min and max was transferred or not. An inspection of (*choice)->u.range is required. If a caller frees min and max after sk_ASIdOrRange_push() failed, there is a double free. All these complications could have been avoided if the API interface had simply used uint32_t instead of ASN1_INTEGERs. The entire RFC 3779 API was clearly written without proper review. I don't know if there ever was an actual consumer before rpki-client. If it existed, nobody with the requisite skill set looked at it in depth. ok beck for the general direction with a lot of input and ok jsing
2023-11-09Forgot to fix the RFC number in the new commentTheo Buehler
2023-11-09Convert PKCS7_SIGNER_INFO_set() to X509_ALGOR_set0_by_nid()Theo Buehler
This is a straightforward conversion because I'm not going to start a cleanup here. Explain why this is not using X509_ALGOR_set_md(). See below. ok jca Let me include a beautiful note from RFC 5754 in its entirety: NOTE: There are two possible encodings for the AlgorithmIdentifier parameters field associated with these object identifiers. The two alternatives arise from the loss of the OPTIONAL associated with the algorithm identifier parameters when the 1988 syntax for AlgorithmIdentifier was translated into the 1997 syntax. Later, the OPTIONAL was recovered via a defect report, but by then many people thought that algorithm parameters were mandatory. Because of this history, some implementations encode parameters as a NULL element while others omit them entirely. The correct encoding is to omit the parameters field; however, when some uses of these algorithms were defined, it was done using the NULL parameters rather than absent parameters. For example, PKCS#1 [RFC3447] requires that the padding used for RSA signatures (EMSA-PKCS1-v1_5) MUST use SHA2 AlgorithmIdentifiers with NULL parameters (to clarify, the requirement "MUST generate SHA2 AlgorithmIdentifiers with absent parameters" in the previous paragraph does not apply to this padding).
2023-11-09Convert ecx_item_sign() to X509_ALGOR_set0_by_nid()Theo Buehler
ok jca
2023-11-09Convert asn1_item_sign() to X509_ALGOR_set0_by_nid()Theo Buehler
ok jca
2023-11-09Fix X509_ALGOR_set0() usage in rsa_alg_set_oaep_padding()Theo Buehler
Replace X509_ALGOR_set0() with X509_ALGOR_set0_by_nid(). This way there is no missing error checking for OBJ_nid2obj() and no nested functions. Slightly more importantly, this plugs two long standing potential leaks in this function (or previously rsa_cms_encrypt()) due to missing error checking: in the unlikely event that X509_ALGOR_set0() failed, astr/ostr would leak. ok jsing
2023-11-09Use X509_ALGOR_set0_by_nid() in rsa_mgf1md_to_maskGenAlgorithm()Theo Buehler
ok jsing
2023-11-08More minor cleanup in rsa_alg_set_oaep_padding()Theo Buehler
Test and assign one more instance replace a useless comment by an empty line.
2023-11-08Prepare further fixes of X509_ALGOR_set0() misuseTheo Buehler
In rsa_alg_set_oaep_padding() rename los to ostr for consistency with astr, make it have function scope, free ostr in the error path and assume X509_ALGOR_set0() success. ok jca
2023-11-08zap a stray spaceTheo Buehler
2023-11-08Rename os into astr in rsa_alg_set_oaep_padding()Theo Buehler
2023-11-08Rename pkctx to pkey_ctx in rsa_alg_set_oaep_padding() and rsa_cms_encrypt()Theo Buehler
2023-11-08Some simple cosmetics in rsa_alg_set_oaep_padding()Theo Buehler
Rename rv into ret and split it on its own line, move labellen a bit down add some empty lines. To match style elsewhere. Most of this was requested by jsing
2023-11-08Split OAEP padding handling into a helper functionTheo Buehler
This matches what is done for PKCS#1 1.5 and PSS. This function needs a lot of work still, but it's easier to do that without having to tiptoe around a lot of other garbage. ok jsing
2023-11-07Move CMS_RecipientInfo_ktri_get0_algs() down a few lines and fix itsTheo Buehler
error check
2023-11-07Move CMS_RecipientInfo_get0_pkey_ctx() to first use of pkctxTheo Buehler
2023-11-07Inline rsa_ctx_to_pss_string()Theo Buehler
After previous refactoring, rsa_all_set_pss_padding() is the last remaining caller of the weirdly named and ugly rsa_all_set_pss_padding(). This can be handled in a few simple lines now that this mess has slightly cleaner code.
2023-11-07Rename pkctx to pkey_ctx in rsa_{cms,item}_sign()Theo Buehler
2023-11-07Trivial cleanup in rsa_cms_sign()Theo Buehler
Check and assign the EVP_PKEY_CTX and move the extraction of the algorithm identifier from the signer info a few lines down.
2023-11-07Rework RSA_PKCS1_PSS_PADDING handling in rsa_item_sign()Theo Buehler
The current convoluted mess can be handled with two calls to the new rsa_alg_set_pss_padding() helper. Not that this would be obvious at all. This fixes two more leaks in case of X509_ALGOR_set0() failure. ok jsing
2023-11-07Add a helper to set RSASSA-PSS padding parametersTheo Buehler
This sets the AlgorithmIdentifier's algorithm to id-RSASSA-PSS with appropriate RSASSA-PSS parameters. This pulls a chunk of code out of rsa_cms_sign() and rewrites it with proper error checking, thereby fixing a long-standing leak. This helper can also be used in rsa_item_sign(), but that part is a bit special, and will therefore be commmitted separately. ok jsing
2023-11-07Add a helper to set RSA PKCS #1 v1.5 padding OIDTheo Buehler
This removes a few duplicated and unchecked X509_ALGOR_set0() calls and factors them into a helper function that sets the AlgorithmIdentifier on the recipient info or signer info to rsaEncryption with null parameters. ok jsing
2023-11-02Fix a few bizarre line wraps in x509.hTheo Buehler
2023-11-01Use X509_ALGOR_set0_by_nid() in X509_ALGOR_set_evp_md()Theo Buehler
ok jsing
2023-11-01Add X509_ALGOR_set0_by_nid()Theo Buehler
X509_ALGOR_set0() is annoyingly unergonomic since it takes an ASN1_OBJECT rather than a nid. This means that almost all callers call OBJ_obj2nid() and they often do this inline without error checking so that the resulting X509_ALGOR object is corrupted and may lead to incorrect encodings. Provide an internal alternative X509_ALGOR_set0_by_nid() that takes a nid instead of an ASN1_OBJECT and performs proper error checking. This will be used to convert callers of X509_ALGOR_set0() in the library. ok jsing
2023-11-01Explain the weird order of doing things in X509_ALGOR_set0()Theo Buehler
2023-11-01Rename ptype and pval to parameter_type and parameter_valueTheo Buehler
ok jsing
2023-11-01Unindent X509_ALGOR_set0_parameter()Theo Buehler
ok jsing
2023-11-01Split X509_ALGOR_set0_parameter() out of X509_ALGOR_set0()Theo Buehler
ok jsing
2023-11-01Split X509_ALGOR_set0_obj() out of X509_ALGOR_set0()Theo Buehler
ok jsing
2023-10-29Fix an error exit in X509v3_addr_validate_path()Theo Buehler
If the topmost cert is invalid, this should result in a validation failure. Do the same dance as elsewhere permitting the verify callback to intercept the error but ensuring that we throw an error. ok jsing
2023-10-26Tidy includesTheo Buehler
2023-10-26Hide X509_ALGOR_set_md() for LIBRESSL_INTERNALTheo Buehler
2023-10-26Rework the MD setting in the RSA ASN.1 methodTheo Buehler
This streamlines the code to use safer idioms, do proper error checking and be slightly less convoluted. Sprinkle a few references to RFC 8017 and explain better what we are doing and why. Clarify ownership and use more consistent style. This removes the last internal use of X509_ALGOR_set_md(). ok jsing
2023-10-24Add chacha aliases for OpenSSL compatibilityTheo Buehler
OpenSSL has the 20 in the long and short names, so add aliases to the existing names to make things work. In particular, EVP_get_cipherbyname() will now return EVP_chacha20() for both 'ChaCha20' and 'chacha20'. Found by Facundo Tuesca when trying to add LibreSSL support for ChaCha20 in https://github.com/pyca/cryptography/pull/9209 ok jsing