Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/boringssl.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2016-06-16Fix the name of OPENSSL_add_all_algorithms_conf.David Benjamin
I named the compatibility function wrong. Change-Id: Idc289c317c5826c338c1daf58a2d3b26b09a7e49 Reviewed-on: https://boringssl-review.googlesource.com/8301 Reviewed-by: Adam Langley <agl@google.com>
2016-06-06Add a no-op OpenSSL_add_all_algorithms_conf.David Benjamin
More spring-cleaning of unnecessary incompatibilities. Since OpenSSL_add_all_algorithms_conf doesn't specify a configuration file, it's perfectly sound to have such a function. Dear BoringSSL, please add all algorithms. Uh, sure. They were already all there, but I have added them! PS: Could you also load all your configuration files while you're at it. ...I don't have any. Fine. I have loaded all configuration files which I recognize. *mutters under breath* why does everyone ask all these strange questions... Change-Id: I57f956933d9e519445bf22f89853bd5f56904172 Reviewed-on: https://boringssl-review.googlesource.com/8160 Reviewed-by: Steven Valdez <svaldez@google.com> Reviewed-by: David Benjamin <davidben@google.com>
2016-03-31Remove some easy obj.h dependencies.David Benjamin
A lot of consumers of obj.h only want the NID values. Others didn't need it at all. This also removes some OBJ_nid2sn and OBJ_nid2ln calls in EVP error paths which isn't worth pulling a large table in for. BUG=chromium:499653 Change-Id: Id6dff578f993012e35b740a13b8e4f9c2edc0744 Reviewed-on: https://boringssl-review.googlesource.com/7563 Reviewed-by: David Benjamin <davidben@google.com>
2016-02-27Reset crypto/evp error codes.David Benjamin
A number of values have fallen off now that code's been shuffled around. Change-Id: I5eac1d3fa4a9335c6aa72b9876d37bb9a9a029ac Reviewed-on: https://boringssl-review.googlesource.com/7029 Reviewed-by: Adam Langley <agl@google.com>
2016-02-27Reimplement d2i_PrivateKey.David Benjamin
Functions which lose object reuse and need auditing: - d2i_PrivateKey This removes evp_asn1.c's dependency on the old stack. (Aside from obj/.) It also takes old_priv_decode out of EVP_ASN1_METHOD in favor of calling out to the new-style function. EVP_ASN1_METHOD no longer has any old-style type-specific serialization hooks, only the PKCS#8 and SPKI ones. BUG=499653 Change-Id: Ic142dc05a5505b50e4717c260d3893b20e680194 Reviewed-on: https://boringssl-review.googlesource.com/7027 Reviewed-by: Adam Langley <agl@google.com>
2016-02-27Decouple the EVP and PEM code.David Benjamin
EVP_PKEY_asn1_find can already be private. EVP_PKEY_asn1_find_str is used only so the PEM code can get at legacy encoders. Since this is all legacy non-PKCS8 stuff, we can just explicitly list out the three cases in the two places that need it. If this changes, we can later add a table in crypto/pem mapping string to EVP_PKEY type. With this, EVP_PKEY_ASN1_METHOD is no longer exposed in the public API and nothing outside of EVP_PKEY reaches into it. Unexport all of that. Change-Id: Iab661014247dbdbc31e5e9887364176ec5ad2a6d Reviewed-on: https://boringssl-review.googlesource.com/6871 Reviewed-by: Adam Langley <agl@google.com>
2016-02-27Move all signature algorithm code to crypto/x509.David Benjamin
All the signature algorithm logic depends on X509_ALGOR. This also removes the X509_ALGOR-based EVP functions which are no longer used externally. I think those APIs were a mistake on my part. The use in Chromium was unnecessary (and has since been removed anyway). The new X.509 stack will want to process the signatureAlgorithm itself to be able to enforce policies on it. This also moves the RSA_PSS_PARAMS bits to crypto/x509 from crypto/rsa. That struct is also tied to crypto/x509. Any new RSA-PSS code would have to use something else anyway. BUG=499653 Change-Id: I6c4b4573b2800a2e0f863d35df94d048864b7c41 Reviewed-on: https://boringssl-review.googlesource.com/7025 Reviewed-by: Adam Langley <agl@google.com>
2016-02-17Implement new PKCS#8 parsers.David Benjamin
As with SPKI parsers, the intent is make EVP_PKEY capture the key's constraints in full fidelity, so we'd have to add new types or store the information in the underlying key object if people introduce variant key types with weird constraints on them. Note that because PKCS#8 has a space for arbitrary attributes, this parser must admit a hole. I'm assuming for now that we don't need an API that enforces no attributes and just ignore trailing data in the structure for simplicity. BUG=499653 Change-Id: I6fc641355e87136c7220f5d7693566d1144a68e8 Reviewed-on: https://boringssl-review.googlesource.com/6866 Reviewed-by: Adam Langley <agl@google.com>
2016-02-17Slightly simplify and deprecate i2d_{Public,Private}Key.David Benjamin
There are all the type-specific serializations rather than something tagged with a type. i2d_PrivateKey's PKCS#8 codepath was unreachable because every EVP_PKEY type has an old_priv_encode function. To prune EVP_PKEY_ASN1_METHOD further, replace i2d_PrivateKey into a switch case so we don't need to keep old_priv_encode around. This cuts down on a case of outside modules reaching into crypto/evp method tables. Change-Id: I30db2eed836d560056ba9d1425b960d0602c3cf2 Reviewed-on: https://boringssl-review.googlesource.com/6865 Reviewed-by: Adam Langley <agl@google.com>
2016-02-17Implement new SPKI parsers.David Benjamin
Many consumers need SPKI support (X.509, TLS, QUIC, WebCrypto), each with different ways to set signature parameters. SPKIs themselves can get complex with id-RSASSA-PSS keys which come with various constraints in the key parameters. This suggests we want a common in-library representation of an SPKI. This adds two new functions EVP_parse_public_key and EVP_marshal_public_key which converts EVP_PKEY to and from SPKI and implements X509_PUBKEY functions with them. EVP_PKEY seems to have been intended to be able to express the supported SPKI types with full-fidelity, so these APIs will continue this. This means future support for id-RSASSA-PSS would *not* repurpose EVP_PKEY_RSA. I'm worried about code assuming EVP_PKEY_RSA implies acting on the RSA* is legal. Instead, it'd add an EVP_PKEY_RSA_PSS and the data pointer would be some (exposed, so the caller may still check key size, etc.) RSA_PSS_KEY struct. Internally, the EVP_PKEY_CTX implementation would enforce the key constraints. If RSA_PSS_KEY would later need its own API, that code would move there, but that seems unlikely. Ideally we'd have a 1:1 correspondence with key OID, although we may have to fudge things if mistakes happen in standardization. (Whether or not X.509 reuses id-ecPublicKey for Ed25519, we'll give it a separate EVP_PKEY type.) DSA parsing hooks are still implemented, missing parameters and all for now. This isn't any worse than before. Decoupling from the giant crypto/obj OID table will be a later task. BUG=522228 Change-Id: I0e3964edf20cb795a18b0991d17e5ca8bce3e28c Reviewed-on: https://boringssl-review.googlesource.com/6861 Reviewed-by: Adam Langley <agl@google.com>
2016-01-28Don't allow EVP_PKEY_RSA2.David Benjamin
OpenSSL accepts both OID 2.5.8.1.1 and OID 1.2.840.113549.1.1.1 for RSA public keys. The latter comes from RFC 3279 and is widely implemented. The former comes from the ITU-T version of X.509. Interestingly, 2.5.8.1.1 actually has a parameter, which OpenSSL ignores: rsa ALGORITHM ::= { KeySize IDENTIFIED BY id-ea-rsa } KeySize ::= INTEGER Remove support for 2.5.8.1.1 completely. In tests with a self-signed certificate and code inspection: - IE11 on Win8 does not accept the certificate in a TLS handshake at all. Such a certificate is fatal and unbypassable. However Microsoft's libraries do seem to parse it, so Chrome on Windows allows one to click through the error. I'm guessing either the X.509 stack accepts it while the TLS stack doesn't recognize it as RSA or the X.509 stack is able to lightly parse it but not actually understand the key. (The system certificate UI didn't display it as an RSA key, so probably the latter?) - Apple's certificate library on 10.11.2 does not parse the certificate at all. Both Safari and Chrome on Mac treat it as a fatal and unbypassable error. - mozilla::pkix, from code inspection, does not accept such certificates. However, Firefox does allow clicking through the error. This is likely a consequence of mozilla::pkix and NSS having different ASN.1 stacks. I did not test this, but I expect this means Chrome on Linux also accepts it. Given IE and Safari's results, it should be safe to simply remove this. Firefox's data point is weak (perhaps someone is relying on being able to click-through a self-signed 2.5.8.1.1 certificate), but it does further ensure no valid certificate could be doing this. The following is the 2.5.8.1.1 certificate I constructed to test with. The private key is key.pem from ssl/test/runner: -----BEGIN CERTIFICATE----- MIICVTCCAb6gAwIBAgIJAPuwTC6rEJsMMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX aWRnaXRzIFB0eSBMdGQwHhcNMTQwNDIzMjA1MDQwWhcNMTcwNDIyMjA1MDQwWjBF MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50 ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIGcMAoGBFUIAQECAgQAA4GNADCBiQKBgQDY K8imMuRi/03z0K1Zi0WnvfFHvwlYeyK9Na6XJYaUoIDAtB92kWdGMdAQhLciHnAj kXLI6W15OoV3gA/ElRZ1xUpxTMhjP6PyY5wqT5r6y8FxbiiFKKAnHmUcrgfVW28t Q+0rkLGMryRtrukXOgXBv7gcrmU7G1jC2a7WqmeI8QIDAQABo1AwTjAdBgNVHQ4E FgQUi3XVrMsIvg4fZbf6Vr5sp3Xaha8wHwYDVR0jBBgwFoAUi3XVrMsIvg4fZbf6 Vr5sp3Xaha8wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQAIZuUICtYv w3cbpCGX6HNCtyI0guOfbytcdwzRkQaCsYNSDrTxrSSWxHwqg3Dl/RlvS+T3Yaua Xkioadstwt7GDP6MwpIpdbjchh0XZd3kjdJWqXSvihUDpRePNjNS2LmJW8GWfB3c F6UVyNK+wcApRY+goREIhyYupAHUexR7FQ== -----END CERTIFICATE----- BUG=522228 Change-Id: I031d03c0f53a16cbc749c4a5d8be6efca50dc863 Reviewed-on: https://boringssl-review.googlesource.com/6852 Reviewed-by: Adam Langley <alangley@gmail.com>
2016-01-28Un-const EVP_PKEY_CTX_set0_rsa_oaep_label and fix overflow check.David Benjamin
It takes ownership of the buffer, so it's not actually const. The const-ness gets dropped once it transits through EVP_PKEY_CTX_ctrl. Also compare against INT_MAX explicitly for the overflow check. I'm not sure whether the casting version is undefined, but comparing against INT_MAX matches the rest of the codebase when transiting in and out of signed ints. Change-Id: I131165a4b5f0ebe02c6db3e7e3e0d1af5b771710 Reviewed-on: https://boringssl-review.googlesource.com/6850 Reviewed-by: Adam Langley <alangley@gmail.com>
2016-01-28Remove app_data from EVP_PKEY_CTX.David Benjamin
It's never used. It's not clear why one would want such a thing. EVP_PKEY_CTX has no way for callers to register callbacks, which means there shouldn't be a way for the library to present you an EVP_PKEY_CTX out-of-context. (Whereas app_data/ex_data makes sense on SSL because of its numerous callbacks or RSA because of RSA_METHOD.) Change-Id: I55af537ab101682677af34f6ac1f2c27b5899a89 Reviewed-on: https://boringssl-review.googlesource.com/6849 Reviewed-by: Adam Langley <alangley@gmail.com>
2016-01-27Tweaks for node.jsAdam Langley
node.js is, effectively, another bindings library. However, it's better written than most and, with these changes, only a couple of tiny fixes are needed in node.js. Some of these changes are a little depressing however so we'll need to push node.js to use APIs where possible. Changes: ∙ Support verify_recover. This is very obscure and the motivation appears to be https://github.com/nodejs/node/issues/477 – where it's not clear that anyone understands what it means :( ∙ Add a few, no-op #defines ∙ Add some members to |SSL_CTX| and |SSL| – node.js needs to not reach into these structs in the future. ∙ Add EC_get_builtin_curves. ∙ Add EVP_[CIPHER|MD]_do_all_sorted – these functions are limited to decrepit. Change-Id: I9a3566054260d6c4db9d430beb7c46cc970a9d46 Reviewed-on: https://boringssl-review.googlesource.com/6952 Reviewed-by: Adam Langley <agl@google.com>
2016-01-19Update comments to better document in-place semantics.Adam Langley
(Comment-only change; no functional difference.) Some code was broken by the |d2i_ECDSA_SIG| change in 87897a8c. It was passing in a pointer to an existing |ECDSA_SIG| as the first argument and then simply assuming that the structure would be updated in place. The comments on the function suggested that this was reasonable. This change updates the comments that use similar wording to either note that the function will never update in-place, or else to note that depending on that is a bad idea for the future. I've also audited all the uses of these functions that I can find and, in addition to the one case with |d2i_ECDSA_SIG|, there are several users of |d2i_PrivateKey| that could become a problem in the future. I'll try to fix them before it does become an issue. Change-Id: I769f7b2e0b5308d09ea07dd447e02fc161795071 Reviewed-on: https://boringssl-review.googlesource.com/6902 Reviewed-by: David Benjamin <davidben@chromium.org> Reviewed-by: Adam Langley <agl@google.com>
2015-12-16Remove DH EVP_PKEY hooks.David Benjamin
They would never work. Better notice when callers depend on it than fail at runtime. This depends on https://android-review.googlesource.com/#/c/183610/ in Conscrypt. Change-Id: I3411f291416df834cf85850890617625a2e76939 Reviewed-on: https://boringssl-review.googlesource.com/6552 Reviewed-by: Adam Langley <agl@google.com>
2015-11-21Add get0 getters for EVP_PKEY.David Benjamin
Right now your options are: - Bounce on a reference and deal with cleanup needlessly. - Manually check the type tag and peek into the union. We probably have no hope of opaquifying this struct, but for new code, let's recommend using this function rather than the more error-prone thing. Change-Id: I9b39ff95fe4264a3f7d1e0d2894db337aa968f6c Reviewed-on: https://boringssl-review.googlesource.com/6551 Reviewed-by: Adam Langley <agl@google.com>
2015-11-07Use typedef names, not struct names.David Benjamin
Not sure if we want to leave bio.h and bytestring.h's instance as-is, but the evp.h ones are just baffling. Change-Id: I485c2e355ba93764da0c4c72c48af48b055a8500 Reviewed-on: https://boringssl-review.googlesource.com/6454 Reviewed-by: Adam Langley <agl@google.com>
2015-11-05Fix up several comments and detect problems in the future.Adam Langley
This change fixes up several comments (many of which were spotted by Kenny Root) and also changes doc.go to detect cases where comments don't start with the correct word. (This is a common error.) Since we have docs builders now, these errors will be found automatically in the future. Change-Id: I58c6dd4266bf3bd4ec748763c8762b1a67ae5ab3 Reviewed-on: https://boringssl-review.googlesource.com/6440 Reviewed-by: Adam Langley <agl@google.com>
2015-08-05Revert "pound-define EVP_R_BAD_DECRYPT CIPHER_R_BAD_DECRYPT."Adam Langley
It will end up allowing some misuses of the error API to break silently, so we're better off without it. This reverts commit 0fba870578f354e98bdf3f03e11211955675568d. Change-Id: I486962c77cb18474ad9eee2acec86b631c99210d
2015-08-03pound-define EVP_R_BAD_DECRYPT CIPHER_R_BAD_DECRYPT.Matt Braithwaite
(This is one of the most common errors that callers test for.) Change-Id: Ic39b8dc6b5551de4a25e8517b9bbedf8a4a94d60 Reviewed-on: https://boringssl-review.googlesource.com/5534 Reviewed-by: Adam Langley <agl@google.com>
2015-08-03include base64.h in evp.hMatt Braithwaite
Change-Id: I0abe925fb094e6d95e03aba144dc266c73a4bb75 Reviewed-on: https://boringssl-review.googlesource.com/5536 Reviewed-by: Adam Langley <agl@google.com>
2015-07-16Get rid of err function codes.David Benjamin
Running make_errors.go every time a function is renamed is incredibly tedious. Plus we keep getting them wrong. Instead, sample __func__ (__FUNCTION__ in MSVC) in the OPENSSL_PUT_ERROR macro and store it alongside file and line number. This doesn't change the format of ERR_print_errors, however ERR_error_string_n now uses the placeholder "OPENSSL_internal" rather than an actual function name since that only takes the uint32_t packed error code as input. This updates err scripts to not emit the function string table. The OPENSSL_PUT_ERROR invocations, for now, still include the extra parameter. That will be removed in a follow-up. BUG=468039 Change-Id: Iaa2ef56991fb58892fa8a1283b3b8b995fbb308d Reviewed-on: https://boringssl-review.googlesource.com/5275 Reviewed-by: Adam Langley <agl@google.com>
2015-07-02Remove EVP_PKEY_dup.David Benjamin
All callers have been moved to EVP_PKEY_up_ref. (Neither spelling exists upstream so we only had our own callers to move.) Change-Id: I267f14054780fe3d6dc1170b7b6ae3811a0d1a9a Reviewed-on: https://boringssl-review.googlesource.com/5291 Reviewed-by: Adam Langley <agl@google.com>
2015-07-01Document i2d_PublicKey better.David Benjamin
The name is confusing. EC keys aren't serialized to DER. DSA keys are also weird, but left alone for now. i2d_DSAPublicKey either serializes to a DSAPublicKey per RFC 3279 if write_params is 0 or what seems to be an OpenSSL-specific format that includes the group if write_params is 1. See upstream's ea6b07b54c1f8fc2275a121cdda071e2df7bd6c1. Change-Id: I0d15140acc2d688a563b615fc6a9e3abec929753 Reviewed-on: https://boringssl-review.googlesource.com/5261 Reviewed-by: Adam Langley <agl@google.com>
2015-07-01Use typedef names in evp.h.David Benjamin
They're all forward-declared. There's no need to use the struct names. Change-Id: I435ae2f5971128f08c730317ca644d97239f3b54 Reviewed-on: https://boringssl-review.googlesource.com/5260 Reviewed-by: Adam Langley <agl@google.com>
2015-06-25Remove EVP_PKEY_HMAC.David Benjamin
This removes EVP_PKEY_HMAC and all the support code around it. EVP_MD requires a lot of extra glue to support HMAC. This lets us prune it all away. As a bonus, it removes a (minor) dependency from EVP to the legacy ASN.1 stack. Change-Id: I5a9e3e39f518429828dbf13d14647fb37d9dc35a Reviewed-on: https://boringssl-review.googlesource.com/5120 Reviewed-by: Adam Langley <agl@google.com>
2015-06-11Correct various documentation typosKenny Root
Some of the documentation had the right explanation but the incorrect function names attached. Change-Id: I7b479dae6d71a5ac7bc86df5a3890508c3b3d09f Reviewed-on: https://boringssl-review.googlesource.com/5090 Reviewed-by: Adam Langley <agl@google.com>
2015-06-02EVP_Digest*Update, EVP_DigestFinal, and HMAC_Update can never fail.David Benjamin
Enough code fails to check their return codes anyway. We ought to make it official. Change-Id: Ie646360fd7073ea943036f5e21bed13df7e1b77a Reviewed-on: https://boringssl-review.googlesource.com/4954 Reviewed-by: Adam Langley <agl@google.com>
2015-05-22Do-nothing fns |OpenSSL_add_all_ciphers| and |OpenSSL_add_all_digests|.Matt Braithwaite
Change-Id: Ied2338f84e03ee1736152b82096335b78a256ca4 Reviewed-on: https://boringssl-review.googlesource.com/4850 Reviewed-by: Adam Langley <agl@google.com>
2015-05-20Convert reference counts in crypto/Adam Langley
This change converts the reference counts in crypto/ to use |CRYPTO_refcount_t|. The reference counts in |X509_PKEY| and |X509_INFO| were never actually used and so were dropped. Change-Id: I75d572cdac1f8c1083c482e29c9519282d7fd16c Reviewed-on: https://boringssl-review.googlesource.com/4772 Reviewed-by: Adam Langley <agl@google.com>
2015-05-05Add |BIO_up_ref| and |EVP_PKEY_up_ref|.Adam Langley
This avoids callers having to worry about |CRYPTO_add| and what the correct lock to use it with is. (Esp since we'll probably change the way that reference counts work in the future.) Change-Id: I972bf0cc3be6099e0255e64a0fd50249062d1eb4 Reviewed-on: https://boringssl-review.googlesource.com/4623 Reviewed-by: Adam Langley <agl@google.com>
2015-04-13Eliminate unnecessary includes from low-level crypto modules.Brian Smith
Beyond generally eliminating unnecessary includes, eliminate as many includes of headers that declare/define particularly error-prone functionality like strlen, malloc, and free. crypto/err/internal.h was added to remove the dependency on openssl/thread.h from the public openssl/err.h header. The include of <stdlib.h> in openssl/mem.h was retained since it defines OPENSSL_malloc and friends as macros around the stdlib.h functions. The public x509.h, x509v3.h, and ssl.h headers were not changed in order to minimize breakage of source compatibility with external code. Change-Id: I0d264b73ad0a720587774430b2ab8f8275960329 Reviewed-on: https://boringssl-review.googlesource.com/4220 Reviewed-by: Adam Langley <agl@google.com>
2015-04-07Add DSA support to EVP.Adam Langley
Sadly, it turns out that we have need of this, at least for now. The code is taken from upstream and changed only as much as needed. This only imports keys and doesn't know how to actually perform operations on them for now. Change-Id: I0db70fb938186cb7a91d03f068b386c59ed90b84
2015-03-25Remove unused fields from EVP_PKEY.David Benjamin
None of these are ever set. Change-Id: If92554a4c560bf8fa2d630c419a946711db30839 Reviewed-on: https://boringssl-review.googlesource.com/4114 Reviewed-by: Adam Langley <agl@google.com>
2015-03-19Explicitly document EVP_PKEY_size vs EVP_PKEY_bits.David Benjamin
They do not quite measure the same value for EC keys. "size" is a really weird notion to generalize on so we should document what it means for each key type. EVP_PKEY_size's meaning is most tied to signatures, thanks to EVP_SignFinal implicitly using it as output bounds. Change-Id: I7504c142818f8f90f8bcf6891c97a6adaf2d574e Reviewed-on: https://boringssl-review.googlesource.com/4000 Reviewed-by: Adam Langley <agl@google.com>
2015-03-13Normalize all EVP_PKEY_CTX_ctrl return values.David Benjamin
No code within BoringSSL or Google (grep for EVP_PKEY_CTX_(ctrl|get|set)) is sensitive to the various failure cases. Normalize it all to 0/1 for simplicity. This does carry a slight risk: any new ctrl hooks we import from upstream that, like EVP_PKEY_CTX_get_rsa_oaep_md, return something other than success/failure cannot be called directly via EVP_PKEY_CTX_ctrl. They instead need to internally be routed through a struct like CBS and only called through the wrappers. To that end, unexport EVP_PKEY_CTX_ctrl and require that callers use the wrappers. No code in Google uses it directly and, if need be, switching to the wrapper would be an incredibly upstreamable patch. Change-Id: I3fd4e5a1a0f3d4d1c4122c52d4c74a5105b99cd5 Reviewed-on: https://boringssl-review.googlesource.com/3874 Reviewed-by: Adam Langley <agl@google.com>
2015-03-13Route EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL through a CBS.David Benjamin
This is the only EVP_PKEY ctrl hook which returns something other than a boolean. Change-Id: Ic226aef168abdf72e5d30e8264a559ed5039a055 Reviewed-on: https://boringssl-review.googlesource.com/3873 Reviewed-by: Adam Langley <agl@google.com>
2015-03-13Move EVP_R_COMMAND_NOT_SUPPORTED into individual EVP_PKEY ctrl hooks.David Benjamin
This removes another place where we're internally sensitive to the success/failure conditions. Change-Id: I18fecf6457e841ba0afb718397b9b5fd3bbdfe4c Reviewed-on: https://boringssl-review.googlesource.com/3872 Reviewed-by: Adam Langley <agl@google.com>
2015-03-13Remove EVP_PKEY_CTRL_DIGESTINIT -2 special-case in md_begin_digest.David Benjamin
All EVP_PKEY types return 1 on that. (It can go away entirely when EVP_PKEY_HMAC is gone.) This removes a place internally where we're sensitive to the failure code. Change-Id: Ic6cda2da9337ba7ef1c66a18e40c5dcc44fcf840 Reviewed-on: https://boringssl-review.googlesource.com/3871 Reviewed-by: Adam Langley <agl@google.com>
2015-02-12Reset all the error codes.David Benjamin
This saves about 6-7k of error data. Change-Id: Ic28593d4a1f5454f00fb2399d281c351ee57fb14 Reviewed-on: https://boringssl-review.googlesource.com/3385 Reviewed-by: Adam Langley <agl@google.com>
2015-01-21Remove support for passing a C-String to PKCS5_PBKDF2_HMAC*().Eric Roman
Before it was possible to pass a NULL-terminated C-string to the PBKDF2 functions, and indicate the parameter was a C-string by passing a length of -1. This is not relied on anywhere in the BoringSSL code, and the API contract is possible to misuse as it is not the common way of doing things. (A problem would arise when passing in a large unsigned length that subsequently gets interpreted as -1). Change-Id: Ifbd31ff76e183fa74e9fa346908daf4bfb8fc3da Reviewed-on: https://boringssl-review.googlesource.com/2953 Reviewed-by: David Benjamin <davidben@chromium.org> Reviewed-by: Adam Langley <agl@google.com>
2015-01-15Remove ECDH_KDF_X9_62 and associated EVP glue.David Benjamin
Removes a bit of unused code. This effectively reverts upstream's 25af7a5dbc05c7359d1d7f472d50d65a9d876b7e. It's new with OpenSSL 1.0.2 so nothing can be using it yet. We can restore it with tests if we end up wanting it later. (Also I think it might be misnamed. The KDF seems to be defined in X9.63, not X9.62.) Change-Id: I482daf681e0cf5c3bbdc72c57793f91448deaee8 Reviewed-on: https://boringssl-review.googlesource.com/2846 Reviewed-by: Adam Langley <agl@google.com>
2015-01-15Deprecate EVP_PKEY_HMAC.David Benjamin
Now that BoringSSL no longer uses it internally, deprecate it until we can get any Google code off it and remove it altogether. Change-Id: I0e15525600b27a65f84b4bb820b879b2424a0ef7 Reviewed-on: https://boringssl-review.googlesource.com/2701 Reviewed-by: Adam Langley <agl@google.com>
2014-11-19Add malloc failure tests.Adam Langley
This commit fixes a number of crashes caused by malloc failures. They were found using the -malloc-test=0 option to runner.go which runs tests many times, causing a different allocation call to fail in each case. (This test only works on Linux and only looks for crashes caused by allocation failures, not memory leaks or other errors.) This is not the complete set of crashes! More can be found by collecting core dumps from running with -malloc-test=0. Change-Id: Ia61d19f51e373bccb7bc604642c51e043a74bd83 Reviewed-on: https://boringssl-review.googlesource.com/2320 Reviewed-by: Adam Langley <agl@google.com>
2014-11-19Add EVP_PKEY_supports_digest.David Benjamin
This is intended for TLS client auth with Windows CAPI- and CNG-backed keys which implement sign over sign_raw and do not support all hash functions. Only plumbed through RSA for now. Change-Id: Ica42e7fb026840f817a169da9372dda226f7d6fd Reviewed-on: https://boringssl-review.googlesource.com/2250 Reviewed-by: Adam Langley <agl@google.com>
2014-11-11Remove pkey_ctrl.Adam Langley
It only included ASN1_PKEY_CTRL_DEFAULT_MD_NID and that's unused in BoringSSL. Change-Id: Idfcbd0f26f6448ce307c53ddef334f2e63c85a64
2014-10-28Make EVP_DigestVerifyFinal return only zero or one.David Benjamin
It was already almost there. Just a malloc failure away. now all the EVP_Digest{Sign,Verify}* functions may be used without worrying about -1 return values. Change-Id: I96a9750b300010615979bd5f1522b1d241764665 Reviewed-on: https://boringssl-review.googlesource.com/2064 Reviewed-by: Adam Langley <agl@google.com>
2014-10-14Don't mix and match libraries and errors.David Benjamin
The same library code applies for both the error and the function, so modules cannot easily report errors from each other. Switch evp/algorithm.c's error codes to the EVP library. Remove the original error codes so it's obvious some changes are needed. - X509_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED -> EVP_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED -> EVP_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED (Actually, the X509 version of this error code doesn't exist in OpenSSL. It should have been ASN1.) - ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM -> EVP_R_UNKNOWN_SIGNATURE_ALGORITHM - ASN1_R_WRONG_PUBLIC_KEY_TYPE -> EVP_R_WRONG_PUBLIC_KEY_TYPE - ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM -> EVP_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM Change-Id: I05b1a05b465d800c85f7d63ca74588edf40847b9 Reviewed-on: https://boringssl-review.googlesource.com/1940 Reviewed-by: Adam Langley <agl@google.com>
2014-10-10Add EVP_DigestVerifyInitFromAlgorithm and EVP_DigestSignAlgorithm.David Benjamin
Factor the AlgorithmIdentifier portions of ASN1_item_sign and ASN1_item_verify out. This makes it possible to initialize a signature context from an AlgorithmIdentifier without needing the data parsed into an ASN1_ITEM/void* pair and reserialized. Change-Id: Idc2e06b1310a3f801aa25de323d39d2b7a44ef50 Reviewed-on: https://boringssl-review.googlesource.com/1916 Reviewed-by: Adam Langley <agl@google.com>