aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJung-uk Kim <jkim@FreeBSD.org>2020-09-25 22:43:14 +0000
committerJung-uk Kim <jkim@FreeBSD.org>2020-09-25 22:43:14 +0000
commit7fc1f569abf7c799c6334297ee020a01b5d3d71e (patch)
tree6494fa45d06ccd27128ac6675e338eb0ee59ac62
parent2367fca656edb8ea52e6a2f7d8ef63e3a38966d6 (diff)
downloadsrc-7fc1f569abf7c799c6334297ee020a01b5d3d71e.tar.gz
src-7fc1f569abf7c799c6334297ee020a01b5d3d71e.zip
MFS: r366176
Merge OpenSSL 1.1.1h. Approved by: re (gjb)
Notes
Notes: svn path=/releng/12.2/; revision=366177
-rw-r--r--crypto/openssl/CHANGES27
-rwxr-xr-xcrypto/openssl/Configure38
-rw-r--r--crypto/openssl/NEWS8
-rw-r--r--crypto/openssl/NOTES.PERL2
-rw-r--r--crypto/openssl/README2
-rw-r--r--crypto/openssl/apps/genpkey.c8
-rw-r--r--crypto/openssl/apps/rsa8192.pem4
-rw-r--r--crypto/openssl/apps/s_client.c22
-rw-r--r--crypto/openssl/apps/x509.c4
-rw-r--r--crypto/openssl/appveyor.yml3
-rw-r--r--crypto/openssl/crypto/aes/aes_core.c351
-rw-r--r--crypto/openssl/crypto/aes/aes_ige.c16
-rw-r--r--crypto/openssl/crypto/asn1/d2i_pr.c4
-rw-r--r--crypto/openssl/crypto/asn1/x_algor.c34
-rw-r--r--crypto/openssl/crypto/bio/b_print.c8
-rw-r--r--crypto/openssl/crypto/bio/bss_acpt.c6
-rw-r--r--crypto/openssl/crypto/bio/bss_conn.c36
-rw-r--r--crypto/openssl/crypto/bn/bn_gcd.c386
-rw-r--r--crypto/openssl/crypto/bn/bn_lib.c22
-rw-r--r--crypto/openssl/crypto/bn/bn_mpi.c4
-rw-r--r--crypto/openssl/crypto/cmac/cmac.c21
-rw-r--r--crypto/openssl/crypto/cms/cms_lib.c5
-rw-r--r--crypto/openssl/crypto/cms/cms_sd.c6
-rw-r--r--crypto/openssl/crypto/conf/conf_def.c4
-rwxr-xr-xcrypto/openssl/crypto/ec/asm/ecp_nistz256-armv4.pl6
-rwxr-xr-xcrypto/openssl/crypto/ec/asm/ecp_nistz256-avx2.pl2080
-rw-r--r--crypto/openssl/crypto/ec/ec_ameth.c27
-rw-r--r--crypto/openssl/crypto/ec/ec_asn1.c40
-rw-r--r--crypto/openssl/crypto/ec/ec_err.c3
-rw-r--r--crypto/openssl/crypto/ec/ec_key.c83
-rw-r--r--crypto/openssl/crypto/ec/ec_lib.c1
-rw-r--r--crypto/openssl/crypto/ec/ec_local.h4
-rw-r--r--crypto/openssl/crypto/ec/ecp_nistp224.c9
-rw-r--r--crypto/openssl/crypto/ec/ecp_nistp521.c33
-rw-r--r--crypto/openssl/crypto/ec/ecp_nistz256.c300
-rw-r--r--crypto/openssl/crypto/engine/eng_lib.c3
-rw-r--r--crypto/openssl/crypto/err/openssl.txt5
-rw-r--r--crypto/openssl/crypto/evp/e_aes.c5
-rw-r--r--crypto/openssl/crypto/evp/encode.c4
-rw-r--r--crypto/openssl/crypto/mem_sec.c4
-rw-r--r--crypto/openssl/crypto/modes/cbc128.c21
-rw-r--r--crypto/openssl/crypto/modes/ccm128.c24
-rw-r--r--crypto/openssl/crypto/modes/cfb128.c20
-rw-r--r--crypto/openssl/crypto/modes/ctr128.c13
-rw-r--r--crypto/openssl/crypto/modes/gcm128.c24
-rw-r--r--crypto/openssl/crypto/modes/modes_local.h14
-rw-r--r--crypto/openssl/crypto/modes/ofb128.c13
-rw-r--r--crypto/openssl/crypto/modes/xts128.c26
-rw-r--r--crypto/openssl/crypto/o_str.c4
-rw-r--r--crypto/openssl/crypto/o_time.c4
-rw-r--r--crypto/openssl/crypto/pem/pem_err.c6
-rw-r--r--crypto/openssl/crypto/pem/pem_lib.c34
-rw-r--r--crypto/openssl/crypto/pem/pem_pkey.c8
-rw-r--r--crypto/openssl/crypto/pem/pvkfmt.c12
-rw-r--r--crypto/openssl/crypto/rand/drbg_ctr.c200
-rw-r--r--crypto/openssl/crypto/rand/drbg_lib.c58
-rw-r--r--crypto/openssl/crypto/rand/rand_lib.c2
-rw-r--r--crypto/openssl/crypto/rand/rand_local.h19
-rw-r--r--crypto/openssl/crypto/rand/rand_unix.c13
-rw-r--r--crypto/openssl/crypto/rand/randfile.c4
-rw-r--r--crypto/openssl/crypto/rsa/rsa_ameth.c11
-rw-r--r--crypto/openssl/crypto/store/loader_file.c38
-rw-r--r--crypto/openssl/crypto/store/store_lib.c8
-rw-r--r--crypto/openssl/crypto/ts/ts_rsp_sign.c2
-rw-r--r--crypto/openssl/crypto/ui/ui_openssl.c12
-rw-r--r--crypto/openssl/crypto/whrlpool/wp_block.c34
-rw-r--r--crypto/openssl/crypto/x509/x509_err.c3
-rw-r--r--crypto/openssl/crypto/x509/x509_local.h4
-rw-r--r--crypto/openssl/crypto/x509/x509_req.c14
-rw-r--r--crypto/openssl/crypto/x509/x509_txt.c4
-rw-r--r--crypto/openssl/crypto/x509/x509_vfy.c176
-rw-r--r--crypto/openssl/crypto/x509/x_pubkey.c9
-rw-r--r--crypto/openssl/crypto/x509v3/pcy_data.c3
-rw-r--r--crypto/openssl/crypto/x509v3/v3_alt.c3
-rw-r--r--crypto/openssl/crypto/x509v3/v3_purp.c64
-rw-r--r--crypto/openssl/doc/man1/CA.pl.pod10
-rw-r--r--crypto/openssl/doc/man1/ca.pod4
-rw-r--r--crypto/openssl/doc/man1/dgst.pod5
-rw-r--r--crypto/openssl/doc/man1/enc.pod4
-rw-r--r--crypto/openssl/doc/man1/ocsp.pod4
-rw-r--r--crypto/openssl/doc/man1/pkcs12.pod4
-rw-r--r--crypto/openssl/doc/man1/pkcs8.pod4
-rw-r--r--crypto/openssl/doc/man1/pkeyutl.pod4
-rw-r--r--crypto/openssl/doc/man1/s_client.pod8
-rw-r--r--crypto/openssl/doc/man1/s_server.pod6
-rw-r--r--crypto/openssl/doc/man1/s_time.pod4
-rw-r--r--crypto/openssl/doc/man1/sess_id.pod2
-rw-r--r--crypto/openssl/doc/man1/ts.pod94
-rw-r--r--crypto/openssl/doc/man1/tsget.pod30
-rw-r--r--crypto/openssl/doc/man1/verify.pod11
-rw-r--r--crypto/openssl/doc/man1/x509.pod2
-rw-r--r--crypto/openssl/doc/man3/ASN1_INTEGER_get_int64.pod4
-rw-r--r--crypto/openssl/doc/man3/ASN1_STRING_length.pod4
-rw-r--r--crypto/openssl/doc/man3/ASN1_TIME_set.pod6
-rw-r--r--crypto/openssl/doc/man3/ASN1_TYPE_get.pod10
-rw-r--r--crypto/openssl/doc/man3/ASYNC_WAIT_CTX_new.pod6
-rw-r--r--crypto/openssl/doc/man3/ASYNC_start_job.pod4
-rw-r--r--crypto/openssl/doc/man3/BF_encrypt.pod4
-rw-r--r--crypto/openssl/doc/man3/BIO_ADDR.pod4
-rw-r--r--crypto/openssl/doc/man3/BIO_ADDRINFO.pod4
-rw-r--r--crypto/openssl/doc/man3/BIO_connect.pod4
-rw-r--r--crypto/openssl/doc/man3/BIO_ctrl.pod4
-rw-r--r--crypto/openssl/doc/man3/BIO_get_data.pod4
-rw-r--r--crypto/openssl/doc/man3/BIO_parse_hostserv.pod6
-rw-r--r--crypto/openssl/doc/man3/BIO_read.pod4
-rw-r--r--crypto/openssl/doc/man3/BIO_s_accept.pod4
-rw-r--r--crypto/openssl/doc/man3/BIO_s_bio.pod6
-rw-r--r--crypto/openssl/doc/man3/BIO_s_connect.pod4
-rw-r--r--crypto/openssl/doc/man3/BIO_s_file.pod4
-rw-r--r--crypto/openssl/doc/man3/BIO_set_callback.pod4
-rw-r--r--crypto/openssl/doc/man3/BN_add.pod10
-rw-r--r--crypto/openssl/doc/man3/BN_bn2bin.pod4
-rw-r--r--crypto/openssl/doc/man3/BN_generate_prime.pod2
-rw-r--r--crypto/openssl/doc/man3/BN_mod_mul_montgomery.pod4
-rw-r--r--crypto/openssl/doc/man3/BN_set_bit.pod6
-rw-r--r--crypto/openssl/doc/man3/CMS_verify.pod6
-rw-r--r--crypto/openssl/doc/man3/CRYPTO_THREAD_run_once.pod4
-rw-r--r--crypto/openssl/doc/man3/CRYPTO_memcmp.pod6
-rw-r--r--crypto/openssl/doc/man3/DES_random_key.pod8
-rw-r--r--crypto/openssl/doc/man3/DH_get0_pqg.pod4
-rw-r--r--crypto/openssl/doc/man3/DH_set_method.pod6
-rw-r--r--crypto/openssl/doc/man3/DSA_set_method.pod6
-rw-r--r--crypto/openssl/doc/man3/DTLSv1_listen.pod6
-rw-r--r--crypto/openssl/doc/man3/ECDSA_SIG_new.pod6
-rw-r--r--crypto/openssl/doc/man3/EC_GROUP_new.pod4
-rw-r--r--crypto/openssl/doc/man3/EC_KEY_new.pod12
-rw-r--r--crypto/openssl/doc/man3/EC_POINT_new.pod4
-rw-r--r--crypto/openssl/doc/man3/ENGINE_add.pod22
-rw-r--r--crypto/openssl/doc/man3/ERR_get_error.pod4
-rw-r--r--crypto/openssl/doc/man3/ERR_print_errors.pod4
-rw-r--r--crypto/openssl/doc/man3/ERR_put_error.pod6
-rw-r--r--crypto/openssl/doc/man3/EVP_DigestInit.pod6
-rw-r--r--crypto/openssl/doc/man3/EVP_DigestSignInit.pod4
-rw-r--r--crypto/openssl/doc/man3/EVP_DigestVerifyInit.pod6
-rw-r--r--crypto/openssl/doc/man3/EVP_EncodeInit.pod8
-rw-r--r--crypto/openssl/doc/man3/EVP_EncryptInit.pod27
-rw-r--r--crypto/openssl/doc/man3/EVP_OpenInit.pod4
-rw-r--r--crypto/openssl/doc/man3/EVP_PKEY_CTX_ctrl.pod4
-rw-r--r--crypto/openssl/doc/man3/EVP_PKEY_CTX_new.pod4
-rw-r--r--crypto/openssl/doc/man3/EVP_PKEY_keygen.pod4
-rw-r--r--crypto/openssl/doc/man3/EVP_PKEY_new.pod3
-rw-r--r--crypto/openssl/doc/man3/EVP_SealInit.pod4
-rw-r--r--crypto/openssl/doc/man3/EVP_SignInit.pod4
-rw-r--r--crypto/openssl/doc/man3/EVP_VerifyInit.pod6
-rw-r--r--crypto/openssl/doc/man3/HMAC.pod8
-rw-r--r--crypto/openssl/doc/man3/OCSP_cert_to_id.pod4
-rw-r--r--crypto/openssl/doc/man3/OCSP_request_add1_nonce.pod2
-rw-r--r--crypto/openssl/doc/man3/OCSP_resp_find_status.pod6
-rw-r--r--crypto/openssl/doc/man3/OCSP_sendreq_new.pod4
-rw-r--r--crypto/openssl/doc/man3/OPENSSL_LH_COMPFUNC.pod6
-rw-r--r--crypto/openssl/doc/man3/OPENSSL_config.pod4
-rw-r--r--crypto/openssl/doc/man3/OPENSSL_ia32cap.pod4
-rw-r--r--crypto/openssl/doc/man3/OPENSSL_init_crypto.pod12
-rw-r--r--crypto/openssl/doc/man3/OPENSSL_init_ssl.pod6
-rw-r--r--crypto/openssl/doc/man3/OSSL_STORE_open.pod33
-rw-r--r--crypto/openssl/doc/man3/PEM_read_bio_PrivateKey.pod6
-rw-r--r--crypto/openssl/doc/man3/PKCS7_verify.pod4
-rw-r--r--crypto/openssl/doc/man3/RAND_DRBG_new.pod4
-rw-r--r--crypto/openssl/doc/man3/RAND_DRBG_set_callbacks.pod4
-rw-r--r--crypto/openssl/doc/man3/RAND_add.pod4
-rw-r--r--crypto/openssl/doc/man3/RAND_load_file.pod8
-rw-r--r--crypto/openssl/doc/man3/RSA_blinding_on.pod4
-rw-r--r--crypto/openssl/doc/man3/RSA_private_encrypt.pod6
-rw-r--r--crypto/openssl/doc/man3/RSA_set_method.pod4
-rw-r--r--crypto/openssl/doc/man3/SHA256_Init.pod5
-rw-r--r--crypto/openssl/doc/man3/SSL_CONF_cmd.pod39
-rw-r--r--crypto/openssl/doc/man3/SSL_CTX_dane_enable.pod8
-rw-r--r--crypto/openssl/doc/man3/SSL_CTX_set_alpn_select_cb.pod4
-rw-r--r--crypto/openssl/doc/man3/SSL_CTX_set_generate_session_id.pod6
-rw-r--r--crypto/openssl/doc/man3/SSL_CTX_set_info_callback.pod6
-rw-r--r--crypto/openssl/doc/man3/SSL_CTX_set_max_cert_list.pod4
-rw-r--r--crypto/openssl/doc/man3/SSL_CTX_set_mode.pod22
-rw-r--r--crypto/openssl/doc/man3/SSL_CTX_set_options.pod20
-rw-r--r--crypto/openssl/doc/man3/SSL_CTX_set_psk_client_callback.pod8
-rw-r--r--crypto/openssl/doc/man3/SSL_CTX_set_read_ahead.pod4
-rw-r--r--crypto/openssl/doc/man3/SSL_CTX_set_security_level.pod8
-rw-r--r--crypto/openssl/doc/man3/SSL_CTX_set_session_cache_mode.pod4
-rw-r--r--crypto/openssl/doc/man3/SSL_CTX_set_session_id_context.pod4
-rw-r--r--crypto/openssl/doc/man3/SSL_CTX_set_session_ticket_cb.pod6
-rw-r--r--crypto/openssl/doc/man3/SSL_CTX_set_split_send_fragment.pod4
-rw-r--r--crypto/openssl/doc/man3/SSL_CTX_set_tlsext_servername_callback.pod8
-rw-r--r--crypto/openssl/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod19
-rw-r--r--crypto/openssl/doc/man3/SSL_CTX_use_psk_identity_hint.pod8
-rw-r--r--crypto/openssl/doc/man3/SSL_accept.pod6
-rw-r--r--crypto/openssl/doc/man3/SSL_alloc_buffers.pod4
-rw-r--r--crypto/openssl/doc/man3/SSL_connect.pod6
-rw-r--r--crypto/openssl/doc/man3/SSL_do_handshake.pod6
-rw-r--r--crypto/openssl/doc/man3/SSL_get_all_async_fds.pod6
-rw-r--r--crypto/openssl/doc/man3/SSL_get_error.pod8
-rw-r--r--crypto/openssl/doc/man3/SSL_new.pod75
-rw-r--r--crypto/openssl/doc/man3/SSL_pending.pod4
-rw-r--r--crypto/openssl/doc/man3/SSL_read.pod8
-rw-r--r--crypto/openssl/doc/man3/SSL_read_early_data.pod19
-rw-r--r--crypto/openssl/doc/man3/SSL_set1_host.pod6
-rw-r--r--crypto/openssl/doc/man3/SSL_set_bio.pod6
-rw-r--r--crypto/openssl/doc/man3/SSL_set_fd.pod6
-rw-r--r--crypto/openssl/doc/man3/SSL_set_shutdown.pod4
-rw-r--r--crypto/openssl/doc/man3/SSL_shutdown.pod24
-rw-r--r--crypto/openssl/doc/man3/SSL_state_string.pod6
-rw-r--r--crypto/openssl/doc/man3/SSL_want.pod4
-rw-r--r--crypto/openssl/doc/man3/SSL_write.pod6
-rw-r--r--crypto/openssl/doc/man3/UI_UTIL_read_pw.pod4
-rw-r--r--crypto/openssl/doc/man3/UI_create_method.pod4
-rw-r--r--crypto/openssl/doc/man3/UI_new.pod4
-rw-r--r--crypto/openssl/doc/man3/X509V3_get_d2i.pod4
-rw-r--r--crypto/openssl/doc/man3/X509_ALGOR_dup.pod18
-rw-r--r--crypto/openssl/doc/man3/X509_LOOKUP_hash_dir.pod4
-rw-r--r--crypto/openssl/doc/man3/X509_LOOKUP_meth_new.pod2
-rw-r--r--crypto/openssl/doc/man3/X509_STORE_CTX_get_error.pod6
-rw-r--r--crypto/openssl/doc/man3/X509_STORE_CTX_new.pod8
-rw-r--r--crypto/openssl/doc/man3/X509_STORE_CTX_set_verify_cb.pod4
-rw-r--r--crypto/openssl/doc/man3/X509_STORE_set_verify_cb_func.pod6
-rw-r--r--crypto/openssl/doc/man3/X509_VERIFY_PARAM_set_flags.pod17
-rw-r--r--crypto/openssl/doc/man3/X509_check_ca.pod4
-rw-r--r--crypto/openssl/doc/man3/X509_check_host.pod10
-rw-r--r--crypto/openssl/doc/man3/X509_check_issued.pod19
-rw-r--r--crypto/openssl/doc/man3/X509_check_purpose.pod4
-rw-r--r--crypto/openssl/doc/man3/X509_get0_signature.pod22
-rw-r--r--crypto/openssl/doc/man3/X509v3_get_ext_by_NID.pod4
-rw-r--r--crypto/openssl/doc/man3/d2i_DHparams.pod4
-rw-r--r--crypto/openssl/doc/man3/d2i_X509.pod12
-rw-r--r--crypto/openssl/doc/man5/config.pod17
-rw-r--r--crypto/openssl/doc/man5/x509v3_config.pod6
-rw-r--r--crypto/openssl/doc/man7/SM2.pod4
-rw-r--r--crypto/openssl/doc/man7/evp.pod14
-rw-r--r--crypto/openssl/doc/man7/ossl_store.pod4
-rw-r--r--crypto/openssl/e_os.h2
-rw-r--r--crypto/openssl/include/openssl/bn.h4
-rw-r--r--crypto/openssl/include/openssl/e_os2.h4
-rw-r--r--crypto/openssl/include/openssl/ec.h4
-rw-r--r--crypto/openssl/include/openssl/ecerr.h3
-rw-r--r--crypto/openssl/include/openssl/opensslconf.h.in7
-rw-r--r--crypto/openssl/include/openssl/opensslv.h4
-rw-r--r--crypto/openssl/include/openssl/pemerr.h4
-rw-r--r--crypto/openssl/include/openssl/ssl.h4
-rw-r--r--crypto/openssl/include/openssl/ssl3.h5
-rw-r--r--crypto/openssl/include/openssl/x509.h5
-rw-r--r--crypto/openssl/include/openssl/x509_vfy.h6
-rw-r--r--crypto/openssl/include/openssl/x509err.h7
-rw-r--r--crypto/openssl/ssl/bio_ssl.c3
-rw-r--r--crypto/openssl/ssl/record/ssl3_buffer.c4
-rw-r--r--crypto/openssl/ssl/ssl_conf.c9
-rw-r--r--crypto/openssl/ssl/ssl_lib.c22
-rw-r--r--crypto/openssl/ssl/ssl_rsa.c28
-rw-r--r--crypto/openssl/ssl/statem/extensions.c14
-rw-r--r--crypto/openssl/ssl/statem/extensions_srvr.c2
-rw-r--r--crypto/openssl/ssl/statem/statem_lib.c35
-rw-r--r--crypto/openssl/ssl/t1_lib.c74
-rw-r--r--crypto/openssl/ssl/t1_trce.c23
-rw-r--r--crypto/openssl/ssl/tls13_enc.c11
-rw-r--r--secure/lib/libcrypto/Makefile.inc4
-rw-r--r--secure/lib/libcrypto/arm/ecp_nistz256-armv4.S6
-rw-r--r--secure/lib/libcrypto/man/man3/ADMISSIONS.34
-rw-r--r--secure/lib/libcrypto/man/man3/ASN1_INTEGER_get_int64.38
-rw-r--r--secure/lib/libcrypto/man/man3/ASN1_ITEM_lookup.34
-rw-r--r--secure/lib/libcrypto/man/man3/ASN1_OBJECT_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/ASN1_STRING_TABLE_add.34
-rw-r--r--secure/lib/libcrypto/man/man3/ASN1_STRING_length.38
-rw-r--r--secure/lib/libcrypto/man/man3/ASN1_STRING_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/ASN1_STRING_print_ex.34
-rw-r--r--secure/lib/libcrypto/man/man3/ASN1_TIME_set.310
-rw-r--r--secure/lib/libcrypto/man/man3/ASN1_TYPE_get.314
-rw-r--r--secure/lib/libcrypto/man/man3/ASN1_generate_nconf.34
-rw-r--r--secure/lib/libcrypto/man/man3/ASYNC_WAIT_CTX_new.310
-rw-r--r--secure/lib/libcrypto/man/man3/ASYNC_start_job.38
-rw-r--r--secure/lib/libcrypto/man/man3/BF_encrypt.38
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_ADDR.38
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_ADDRINFO.38
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_connect.38
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_ctrl.38
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_f_base64.34
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_f_buffer.34
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_f_cipher.34
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_f_md.34
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_f_null.34
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_f_ssl.34
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_find_type.34
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_get_data.38
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_get_ex_new_index.34
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_meth_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_new_CMS.34
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_parse_hostserv.310
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_printf.34
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_push.34
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_read.38
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_s_accept.38
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_s_bio.310
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_s_connect.38
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_s_fd.34
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_s_file.38
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_s_mem.34
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_s_null.34
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_s_socket.34
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_set_callback.38
-rw-r--r--secure/lib/libcrypto/man/man3/BIO_should_retry.34
-rw-r--r--secure/lib/libcrypto/man/man3/BN_BLINDING_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/BN_CTX_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/BN_CTX_start.34
-rw-r--r--secure/lib/libcrypto/man/man3/BN_add.314
-rw-r--r--secure/lib/libcrypto/man/man3/BN_add_word.34
-rw-r--r--secure/lib/libcrypto/man/man3/BN_bn2bin.38
-rw-r--r--secure/lib/libcrypto/man/man3/BN_cmp.34
-rw-r--r--secure/lib/libcrypto/man/man3/BN_copy.34
-rw-r--r--secure/lib/libcrypto/man/man3/BN_generate_prime.36
-rw-r--r--secure/lib/libcrypto/man/man3/BN_mod_inverse.34
-rw-r--r--secure/lib/libcrypto/man/man3/BN_mod_mul_montgomery.38
-rw-r--r--secure/lib/libcrypto/man/man3/BN_mod_mul_reciprocal.34
-rw-r--r--secure/lib/libcrypto/man/man3/BN_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/BN_num_bytes.34
-rw-r--r--secure/lib/libcrypto/man/man3/BN_rand.34
-rw-r--r--secure/lib/libcrypto/man/man3/BN_security_bits.34
-rw-r--r--secure/lib/libcrypto/man/man3/BN_set_bit.310
-rw-r--r--secure/lib/libcrypto/man/man3/BN_swap.34
-rw-r--r--secure/lib/libcrypto/man/man3/BN_zero.34
-rw-r--r--secure/lib/libcrypto/man/man3/BUF_MEM_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/CMS_add0_cert.34
-rw-r--r--secure/lib/libcrypto/man/man3/CMS_add1_recipient_cert.34
-rw-r--r--secure/lib/libcrypto/man/man3/CMS_add1_signer.34
-rw-r--r--secure/lib/libcrypto/man/man3/CMS_compress.34
-rw-r--r--secure/lib/libcrypto/man/man3/CMS_decrypt.34
-rw-r--r--secure/lib/libcrypto/man/man3/CMS_encrypt.34
-rw-r--r--secure/lib/libcrypto/man/man3/CMS_final.34
-rw-r--r--secure/lib/libcrypto/man/man3/CMS_get0_RecipientInfos.34
-rw-r--r--secure/lib/libcrypto/man/man3/CMS_get0_SignerInfos.34
-rw-r--r--secure/lib/libcrypto/man/man3/CMS_get0_type.34
-rw-r--r--secure/lib/libcrypto/man/man3/CMS_get1_ReceiptRequest.34
-rw-r--r--secure/lib/libcrypto/man/man3/CMS_sign.34
-rw-r--r--secure/lib/libcrypto/man/man3/CMS_sign_receipt.34
-rw-r--r--secure/lib/libcrypto/man/man3/CMS_uncompress.34
-rw-r--r--secure/lib/libcrypto/man/man3/CMS_verify.310
-rw-r--r--secure/lib/libcrypto/man/man3/CMS_verify_receipt.34
-rw-r--r--secure/lib/libcrypto/man/man3/CONF_modules_free.34
-rw-r--r--secure/lib/libcrypto/man/man3/CONF_modules_load_file.34
-rw-r--r--secure/lib/libcrypto/man/man3/CRYPTO_THREAD_run_once.38
-rw-r--r--secure/lib/libcrypto/man/man3/CRYPTO_get_ex_new_index.34
-rw-r--r--secure/lib/libcrypto/man/man3/CRYPTO_memcmp.310
-rw-r--r--secure/lib/libcrypto/man/man3/CTLOG_STORE_get0_log_by_id.34
-rw-r--r--secure/lib/libcrypto/man/man3/CTLOG_STORE_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/CTLOG_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/CT_POLICY_EVAL_CTX_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/DEFINE_STACK_OF.34
-rw-r--r--secure/lib/libcrypto/man/man3/DES_random_key.312
-rw-r--r--secure/lib/libcrypto/man/man3/DH_generate_key.34
-rw-r--r--secure/lib/libcrypto/man/man3/DH_generate_parameters.34
-rw-r--r--secure/lib/libcrypto/man/man3/DH_get0_pqg.38
-rw-r--r--secure/lib/libcrypto/man/man3/DH_get_1024_160.34
-rw-r--r--secure/lib/libcrypto/man/man3/DH_meth_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/DH_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/DH_new_by_nid.34
-rw-r--r--secure/lib/libcrypto/man/man3/DH_set_method.310
-rw-r--r--secure/lib/libcrypto/man/man3/DH_size.34
-rw-r--r--secure/lib/libcrypto/man/man3/DSA_SIG_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/DSA_do_sign.34
-rw-r--r--secure/lib/libcrypto/man/man3/DSA_dup_DH.34
-rw-r--r--secure/lib/libcrypto/man/man3/DSA_generate_key.34
-rw-r--r--secure/lib/libcrypto/man/man3/DSA_generate_parameters.34
-rw-r--r--secure/lib/libcrypto/man/man3/DSA_get0_pqg.34
-rw-r--r--secure/lib/libcrypto/man/man3/DSA_meth_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/DSA_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/DSA_set_method.310
-rw-r--r--secure/lib/libcrypto/man/man3/DSA_sign.34
-rw-r--r--secure/lib/libcrypto/man/man3/DSA_size.34
-rw-r--r--secure/lib/libcrypto/man/man3/DTLS_get_data_mtu.34
-rw-r--r--secure/lib/libcrypto/man/man3/DTLS_set_timer_cb.34
-rw-r--r--secure/lib/libcrypto/man/man3/DTLSv1_listen.310
-rw-r--r--secure/lib/libcrypto/man/man3/ECDSA_SIG_new.310
-rw-r--r--secure/lib/libcrypto/man/man3/ECPKParameters_print.34
-rw-r--r--secure/lib/libcrypto/man/man3/EC_GFp_simple_method.34
-rw-r--r--secure/lib/libcrypto/man/man3/EC_GROUP_copy.34
-rw-r--r--secure/lib/libcrypto/man/man3/EC_GROUP_new.38
-rw-r--r--secure/lib/libcrypto/man/man3/EC_KEY_get_enc_flags.34
-rw-r--r--secure/lib/libcrypto/man/man3/EC_KEY_new.315
-rw-r--r--secure/lib/libcrypto/man/man3/EC_POINT_add.34
-rw-r--r--secure/lib/libcrypto/man/man3/EC_POINT_new.38
-rw-r--r--secure/lib/libcrypto/man/man3/ENGINE_add.326
-rw-r--r--secure/lib/libcrypto/man/man3/ERR_GET_LIB.34
-rw-r--r--secure/lib/libcrypto/man/man3/ERR_clear_error.34
-rw-r--r--secure/lib/libcrypto/man/man3/ERR_error_string.34
-rw-r--r--secure/lib/libcrypto/man/man3/ERR_get_error.38
-rw-r--r--secure/lib/libcrypto/man/man3/ERR_load_crypto_strings.34
-rw-r--r--secure/lib/libcrypto/man/man3/ERR_load_strings.34
-rw-r--r--secure/lib/libcrypto/man/man3/ERR_print_errors.38
-rw-r--r--secure/lib/libcrypto/man/man3/ERR_put_error.310
-rw-r--r--secure/lib/libcrypto/man/man3/ERR_remove_state.34
-rw-r--r--secure/lib/libcrypto/man/man3/ERR_set_mark.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_BytesToKey.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_CIPHER_CTX_get_cipher_data.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_CIPHER_meth_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_DigestInit.310
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_DigestSignInit.38
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_DigestVerifyInit.310
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_EncodeInit.312
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_EncryptInit.331
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_MD_meth_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_OpenInit.38
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_PKEY_ASN1_METHOD.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_PKEY_CTX_ctrl.38
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_PKEY_CTX_new.38
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_PKEY_CTX_set1_pbe_pass.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_PKEY_CTX_set_hkdf_md.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_PKEY_CTX_set_scrypt_N.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_PKEY_CTX_set_tls1_prf_md.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_PKEY_asn1_get_count.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_PKEY_cmp.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_PKEY_decrypt.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_PKEY_derive.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_PKEY_encrypt.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_PKEY_get_default_digest_nid.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_PKEY_keygen.38
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_PKEY_meth_get_count.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_PKEY_meth_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_PKEY_new.37
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_PKEY_print_private.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_PKEY_set1_RSA.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_PKEY_sign.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_PKEY_size.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_PKEY_verify.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_PKEY_verify_recover.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_SealInit.38
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_SignInit.38
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_VerifyInit.310
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_aes.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_aria.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_bf_cbc.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_blake2b512.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_camellia.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_cast5_cbc.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_chacha20.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_des.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_desx_cbc.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_idea_cbc.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_md2.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_md4.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_md5.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_mdc2.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_rc2_cbc.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_rc4.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_rc5_32_12_16_cbc.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_ripemd160.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_seed_cbc.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_sha1.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_sha224.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_sha3_224.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_sm3.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_sm4_cbc.34
-rw-r--r--secure/lib/libcrypto/man/man3/EVP_whirlpool.34
-rw-r--r--secure/lib/libcrypto/man/man3/HMAC.312
-rw-r--r--secure/lib/libcrypto/man/man3/MD5.34
-rw-r--r--secure/lib/libcrypto/man/man3/MDC2_Init.34
-rw-r--r--secure/lib/libcrypto/man/man3/Makefile4
-rw-r--r--secure/lib/libcrypto/man/man3/OBJ_nid2obj.34
-rw-r--r--secure/lib/libcrypto/man/man3/OCSP_REQUEST_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/OCSP_cert_to_id.38
-rw-r--r--secure/lib/libcrypto/man/man3/OCSP_request_add1_nonce.36
-rw-r--r--secure/lib/libcrypto/man/man3/OCSP_resp_find_status.310
-rw-r--r--secure/lib/libcrypto/man/man3/OCSP_response_status.34
-rw-r--r--secure/lib/libcrypto/man/man3/OCSP_sendreq_new.38
-rw-r--r--secure/lib/libcrypto/man/man3/OPENSSL_Applink.34
-rw-r--r--secure/lib/libcrypto/man/man3/OPENSSL_LH_COMPFUNC.310
-rw-r--r--secure/lib/libcrypto/man/man3/OPENSSL_LH_stats.34
-rw-r--r--secure/lib/libcrypto/man/man3/OPENSSL_VERSION_NUMBER.34
-rw-r--r--secure/lib/libcrypto/man/man3/OPENSSL_config.38
-rw-r--r--secure/lib/libcrypto/man/man3/OPENSSL_fork_prepare.34
-rw-r--r--secure/lib/libcrypto/man/man3/OPENSSL_ia32cap.310
-rw-r--r--secure/lib/libcrypto/man/man3/OPENSSL_init_crypto.316
-rw-r--r--secure/lib/libcrypto/man/man3/OPENSSL_init_ssl.310
-rw-r--r--secure/lib/libcrypto/man/man3/OPENSSL_instrument_bus.34
-rw-r--r--secure/lib/libcrypto/man/man3/OPENSSL_load_builtin_modules.34
-rw-r--r--secure/lib/libcrypto/man/man3/OPENSSL_malloc.34
-rw-r--r--secure/lib/libcrypto/man/man3/OPENSSL_secure_malloc.34
-rw-r--r--secure/lib/libcrypto/man/man3/OSSL_STORE_INFO.34
-rw-r--r--secure/lib/libcrypto/man/man3/OSSL_STORE_LOADER.34
-rw-r--r--secure/lib/libcrypto/man/man3/OSSL_STORE_SEARCH.34
-rw-r--r--secure/lib/libcrypto/man/man3/OSSL_STORE_expect.34
-rw-r--r--secure/lib/libcrypto/man/man3/OSSL_STORE_open.337
-rw-r--r--secure/lib/libcrypto/man/man3/OpenSSL_add_all_algorithms.34
-rw-r--r--secure/lib/libcrypto/man/man3/PEM_bytes_read_bio.34
-rw-r--r--secure/lib/libcrypto/man/man3/PEM_read.34
-rw-r--r--secure/lib/libcrypto/man/man3/PEM_read_CMS.34
-rw-r--r--secure/lib/libcrypto/man/man3/PEM_read_bio_PrivateKey.310
-rw-r--r--secure/lib/libcrypto/man/man3/PEM_read_bio_ex.34
-rw-r--r--secure/lib/libcrypto/man/man3/PEM_write_bio_CMS_stream.34
-rw-r--r--secure/lib/libcrypto/man/man3/PEM_write_bio_PKCS7_stream.34
-rw-r--r--secure/lib/libcrypto/man/man3/PKCS12_create.34
-rw-r--r--secure/lib/libcrypto/man/man3/PKCS12_newpass.34
-rw-r--r--secure/lib/libcrypto/man/man3/PKCS12_parse.34
-rw-r--r--secure/lib/libcrypto/man/man3/PKCS5_PBKDF2_HMAC.34
-rw-r--r--secure/lib/libcrypto/man/man3/PKCS7_decrypt.34
-rw-r--r--secure/lib/libcrypto/man/man3/PKCS7_encrypt.34
-rw-r--r--secure/lib/libcrypto/man/man3/PKCS7_sign.34
-rw-r--r--secure/lib/libcrypto/man/man3/PKCS7_sign_add_signer.34
-rw-r--r--secure/lib/libcrypto/man/man3/PKCS7_verify.38
-rw-r--r--secure/lib/libcrypto/man/man3/RAND_DRBG_generate.34
-rw-r--r--secure/lib/libcrypto/man/man3/RAND_DRBG_get0_master.34
-rw-r--r--secure/lib/libcrypto/man/man3/RAND_DRBG_new.38
-rw-r--r--secure/lib/libcrypto/man/man3/RAND_DRBG_reseed.34
-rw-r--r--secure/lib/libcrypto/man/man3/RAND_DRBG_set_callbacks.38
-rw-r--r--secure/lib/libcrypto/man/man3/RAND_DRBG_set_ex_data.34
-rw-r--r--secure/lib/libcrypto/man/man3/RAND_add.38
-rw-r--r--secure/lib/libcrypto/man/man3/RAND_bytes.34
-rw-r--r--secure/lib/libcrypto/man/man3/RAND_cleanup.34
-rw-r--r--secure/lib/libcrypto/man/man3/RAND_egd.34
-rw-r--r--secure/lib/libcrypto/man/man3/RAND_load_file.312
-rw-r--r--secure/lib/libcrypto/man/man3/RAND_set_rand_method.34
-rw-r--r--secure/lib/libcrypto/man/man3/RC4_set_key.34
-rw-r--r--secure/lib/libcrypto/man/man3/RIPEMD160_Init.34
-rw-r--r--secure/lib/libcrypto/man/man3/RSA_blinding_on.38
-rw-r--r--secure/lib/libcrypto/man/man3/RSA_check_key.34
-rw-r--r--secure/lib/libcrypto/man/man3/RSA_generate_key.34
-rw-r--r--secure/lib/libcrypto/man/man3/RSA_get0_key.34
-rw-r--r--secure/lib/libcrypto/man/man3/RSA_meth_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/RSA_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/RSA_padding_add_PKCS1_type_1.34
-rw-r--r--secure/lib/libcrypto/man/man3/RSA_print.34
-rw-r--r--secure/lib/libcrypto/man/man3/RSA_private_encrypt.310
-rw-r--r--secure/lib/libcrypto/man/man3/RSA_public_encrypt.34
-rw-r--r--secure/lib/libcrypto/man/man3/RSA_set_method.38
-rw-r--r--secure/lib/libcrypto/man/man3/RSA_sign.34
-rw-r--r--secure/lib/libcrypto/man/man3/RSA_sign_ASN1_OCTET_STRING.34
-rw-r--r--secure/lib/libcrypto/man/man3/RSA_size.34
-rw-r--r--secure/lib/libcrypto/man/man3/SCT_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/SCT_print.34
-rw-r--r--secure/lib/libcrypto/man/man3/SCT_validate.34
-rw-r--r--secure/lib/libcrypto/man/man3/SHA256_Init.39
-rw-r--r--secure/lib/libcrypto/man/man3/SMIME_read_CMS.34
-rw-r--r--secure/lib/libcrypto/man/man3/SMIME_read_PKCS7.34
-rw-r--r--secure/lib/libcrypto/man/man3/SMIME_write_CMS.34
-rw-r--r--secure/lib/libcrypto/man/man3/SMIME_write_PKCS7.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CIPHER_get_name.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_COMP_add_compression_method.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CONF_CTX_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CONF_CTX_set1_prefix.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CONF_CTX_set_flags.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CONF_CTX_set_ssl_ctx.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CONF_cmd.343
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CONF_cmd_argv.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_add1_chain_cert.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_add_extra_chain_cert.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_add_session.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_config.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_ctrl.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_dane_enable.312
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_flush_sessions.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_free.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_get0_param.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_get_verify_mode.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_has_client_custom_ext.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_load_verify_locations.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_sess_number.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_sess_set_cache_size.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_sess_set_get_cb.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_sessions.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set0_CA_list.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set1_curves.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set1_sigalgs.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set1_verify_cert_store.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_alpn_select_cb.38
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_cert_cb.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_cert_store.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_cert_verify_callback.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_cipher_list.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_client_cert_cb.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_client_hello_cb.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_ct_validation_callback.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_ctlog_list_file.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_default_passwd_cb.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_ex_data.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_generate_session_id.310
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_info_callback.310
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_keylog_callback.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_max_cert_list.38
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_min_proto_version.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_mode.326
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_msg_callback.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_num_tickets.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_options.324
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_psk_client_callback.312
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_quiet_shutdown.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_read_ahead.38
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_record_padding_callback.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_security_level.312
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_session_cache_mode.38
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_session_id_context.38
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_session_ticket_cb.310
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_split_send_fragment.38
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_ssl_version.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_stateless_cookie_generate_cb.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_timeout.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_tlsext_servername_callback.312
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_tlsext_status_cb.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_tlsext_ticket_key_cb.323
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_tlsext_use_srtp.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_tmp_dh_callback.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_set_verify.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_use_certificate.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_use_psk_identity_hint.312
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_CTX_use_serverinfo.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_SESSION_free.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_SESSION_get0_cipher.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_SESSION_get0_hostname.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_SESSION_get0_id_context.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_SESSION_get0_peer.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_SESSION_get_compress_id.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_SESSION_get_ex_data.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_SESSION_get_protocol_version.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_SESSION_get_time.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_SESSION_has_ticket.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_SESSION_is_resumable.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_SESSION_print.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_SESSION_set1_id.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_accept.310
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_alert_type_string.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_alloc_buffers.38
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_check_chain.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_clear.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_connect.310
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_do_handshake.310
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_export_keying_material.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_extension_supported.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_free.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_get0_peer_scts.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_get_SSL_CTX.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_get_all_async_fds.310
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_get_ciphers.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_get_client_random.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_get_current_cipher.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_get_default_timeout.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_get_error.312
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_get_extms_support.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_get_fd.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_get_peer_cert_chain.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_get_peer_certificate.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_get_peer_signature_nid.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_get_peer_tmp_key.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_get_psk_identity.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_get_rbio.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_get_session.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_get_shared_sigalgs.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_get_verify_result.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_get_version.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_in_init.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_key_update.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_library_init.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_load_client_CA_file.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_new.371
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_pending.38
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_read.312
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_read_early_data.323
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_rstate_string.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_session_reused.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_set1_host.310
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_set_bio.310
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_set_connect_state.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_set_fd.310
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_set_session.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_set_shutdown.38
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_set_verify_result.34
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_shutdown.328
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_state_string.310
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_want.38
-rw-r--r--secure/lib/libcrypto/man/man3/SSL_write.310
-rw-r--r--secure/lib/libcrypto/man/man3/UI_STRING.34
-rw-r--r--secure/lib/libcrypto/man/man3/UI_UTIL_read_pw.38
-rw-r--r--secure/lib/libcrypto/man/man3/UI_create_method.38
-rw-r--r--secure/lib/libcrypto/man/man3/UI_new.38
-rw-r--r--secure/lib/libcrypto/man/man3/X509V3_get_d2i.38
-rw-r--r--secure/lib/libcrypto/man/man3/X509_ALGOR_dup.321
-rw-r--r--secure/lib/libcrypto/man/man3/X509_CRL_get0_by_serial.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_EXTENSION_set_object.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_LOOKUP.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_LOOKUP_hash_dir.38
-rw-r--r--secure/lib/libcrypto/man/man3/X509_LOOKUP_meth_new.36
-rw-r--r--secure/lib/libcrypto/man/man3/X509_NAME_ENTRY_get_object.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_NAME_add_entry_by_txt.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_NAME_get0_der.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_NAME_get_index_by_NID.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_NAME_print_ex.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_PUBKEY_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_SIG_get0.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_STORE_CTX_get_error.310
-rw-r--r--secure/lib/libcrypto/man/man3/X509_STORE_CTX_new.312
-rw-r--r--secure/lib/libcrypto/man/man3/X509_STORE_CTX_set_verify_cb.38
-rw-r--r--secure/lib/libcrypto/man/man3/X509_STORE_add_cert.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_STORE_get0_param.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_STORE_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_STORE_set_verify_cb_func.310
-rw-r--r--secure/lib/libcrypto/man/man3/X509_VERIFY_PARAM_set_flags.321
-rw-r--r--secure/lib/libcrypto/man/man3/X509_check_ca.38
-rw-r--r--secure/lib/libcrypto/man/man3/X509_check_host.314
-rw-r--r--secure/lib/libcrypto/man/man3/X509_check_issued.323
-rw-r--r--secure/lib/libcrypto/man/man3/X509_check_private_key.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_check_purpose.312
-rw-r--r--secure/lib/libcrypto/man/man3/X509_cmp.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_cmp_time.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_digest.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_dup.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_get0_notBefore.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_get0_signature.320
-rw-r--r--secure/lib/libcrypto/man/man3/X509_get0_uids.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_get_extension_flags.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_get_pubkey.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_get_serialNumber.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_get_subject_name.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_get_version.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_new.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_sign.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509_verify_cert.34
-rw-r--r--secure/lib/libcrypto/man/man3/X509v3_get_ext_by_NID.38
-rw-r--r--secure/lib/libcrypto/man/man3/d2i_DHparams.38
-rw-r--r--secure/lib/libcrypto/man/man3/d2i_PKCS8PrivateKey_bio.34
-rw-r--r--secure/lib/libcrypto/man/man3/d2i_PrivateKey.34
-rw-r--r--secure/lib/libcrypto/man/man3/d2i_SSL_SESSION.34
-rw-r--r--secure/lib/libcrypto/man/man3/d2i_X509.320
-rw-r--r--secure/lib/libcrypto/man/man3/i2d_CMS_bio_stream.34
-rw-r--r--secure/lib/libcrypto/man/man3/i2d_PKCS7_bio_stream.34
-rw-r--r--secure/lib/libcrypto/man/man3/i2d_re_X509_tbs.34
-rw-r--r--secure/lib/libcrypto/man/man3/o2i_SCT_LIST.34
-rw-r--r--secure/lib/libcrypto/man/man5/x509v3_config.510
-rw-r--r--secure/lib/libcrypto/man/man7/Ed25519.74
-rw-r--r--secure/lib/libcrypto/man/man7/RAND.74
-rw-r--r--secure/lib/libcrypto/man/man7/RAND_DRBG.74
-rw-r--r--secure/lib/libcrypto/man/man7/RSA-PSS.74
-rw-r--r--secure/lib/libcrypto/man/man7/SM2.78
-rw-r--r--secure/lib/libcrypto/man/man7/X25519.74
-rw-r--r--secure/lib/libcrypto/man/man7/bio.74
-rw-r--r--secure/lib/libcrypto/man/man7/ct.74
-rw-r--r--secure/lib/libcrypto/man/man7/des_modes.74
-rw-r--r--secure/lib/libcrypto/man/man7/evp.720
-rw-r--r--secure/lib/libcrypto/man/man7/ossl_store-file.74
-rw-r--r--secure/lib/libcrypto/man/man7/ossl_store.78
-rw-r--r--secure/lib/libcrypto/man/man7/passphrase-encoding.74
-rw-r--r--secure/lib/libcrypto/man/man7/proxy-certificates.74
-rw-r--r--secure/lib/libcrypto/man/man7/scrypt.74
-rw-r--r--secure/lib/libcrypto/man/man7/ssl.74
-rw-r--r--secure/lib/libcrypto/man/man7/x509.74
-rw-r--r--secure/usr.bin/openssl/man/CA.pl.114
-rw-r--r--secure/usr.bin/openssl/man/asn1parse.14
-rw-r--r--secure/usr.bin/openssl/man/ca.18
-rw-r--r--secure/usr.bin/openssl/man/ciphers.14
-rw-r--r--secure/usr.bin/openssl/man/cms.14
-rw-r--r--secure/usr.bin/openssl/man/crl.14
-rw-r--r--secure/usr.bin/openssl/man/crl2pkcs7.14
-rw-r--r--secure/usr.bin/openssl/man/dgst.19
-rw-r--r--secure/usr.bin/openssl/man/dhparam.14
-rw-r--r--secure/usr.bin/openssl/man/dsa.14
-rw-r--r--secure/usr.bin/openssl/man/dsaparam.14
-rw-r--r--secure/usr.bin/openssl/man/ec.14
-rw-r--r--secure/usr.bin/openssl/man/ecparam.14
-rw-r--r--secure/usr.bin/openssl/man/enc.18
-rw-r--r--secure/usr.bin/openssl/man/engine.14
-rw-r--r--secure/usr.bin/openssl/man/errstr.14
-rw-r--r--secure/usr.bin/openssl/man/gendsa.14
-rw-r--r--secure/usr.bin/openssl/man/genpkey.14
-rw-r--r--secure/usr.bin/openssl/man/genrsa.14
-rw-r--r--secure/usr.bin/openssl/man/list.14
-rw-r--r--secure/usr.bin/openssl/man/nseq.14
-rw-r--r--secure/usr.bin/openssl/man/ocsp.18
-rw-r--r--secure/usr.bin/openssl/man/openssl.14
-rw-r--r--secure/usr.bin/openssl/man/passwd.14
-rw-r--r--secure/usr.bin/openssl/man/pkcs12.18
-rw-r--r--secure/usr.bin/openssl/man/pkcs7.14
-rw-r--r--secure/usr.bin/openssl/man/pkcs8.18
-rw-r--r--secure/usr.bin/openssl/man/pkey.14
-rw-r--r--secure/usr.bin/openssl/man/pkeyparam.14
-rw-r--r--secure/usr.bin/openssl/man/pkeyutl.18
-rw-r--r--secure/usr.bin/openssl/man/prime.14
-rw-r--r--secure/usr.bin/openssl/man/rand.14
-rw-r--r--secure/usr.bin/openssl/man/req.14
-rw-r--r--secure/usr.bin/openssl/man/rsa.14
-rw-r--r--secure/usr.bin/openssl/man/rsautl.14
-rw-r--r--secure/usr.bin/openssl/man/s_client.112
-rw-r--r--secure/usr.bin/openssl/man/s_server.110
-rw-r--r--secure/usr.bin/openssl/man/s_time.18
-rw-r--r--secure/usr.bin/openssl/man/sess_id.16
-rw-r--r--secure/usr.bin/openssl/man/smime.14
-rw-r--r--secure/usr.bin/openssl/man/speed.14
-rw-r--r--secure/usr.bin/openssl/man/spkac.14
-rw-r--r--secure/usr.bin/openssl/man/srp.14
-rw-r--r--secure/usr.bin/openssl/man/storeutl.14
-rw-r--r--secure/usr.bin/openssl/man/ts.198
-rw-r--r--secure/usr.bin/openssl/man/tsget.134
-rw-r--r--secure/usr.bin/openssl/man/verify.115
-rw-r--r--secure/usr.bin/openssl/man/version.14
-rw-r--r--secure/usr.bin/openssl/man/x509.16
787 files changed, 3879 insertions, 5532 deletions
diff --git a/crypto/openssl/CHANGES b/crypto/openssl/CHANGES
index 057405b0bff9..7ea3d2b82322 100644
--- a/crypto/openssl/CHANGES
+++ b/crypto/openssl/CHANGES
@@ -7,6 +7,33 @@
https://github.com/openssl/openssl/commits/ and pick the appropriate
release branch.
+ Changes between 1.1.1g and 1.1.1h [22 Sep 2020]
+
+ *) Certificates with explicit curve parameters are now disallowed in
+ verification chains if the X509_V_FLAG_X509_STRICT flag is used.
+ [Tomas Mraz]
+
+ *) The 'MinProtocol' and 'MaxProtocol' configuration commands now silently
+ ignore TLS protocol version bounds when configuring DTLS-based contexts, and
+ conversely, silently ignore DTLS protocol version bounds when configuring
+ TLS-based contexts. The commands can be repeated to set bounds of both
+ types. The same applies with the corresponding "min_protocol" and
+ "max_protocol" command-line switches, in case some application uses both TLS
+ and DTLS.
+
+ SSL_CTX instances that are created for a fixed protocol version (e.g.
+ TLSv1_server_method()) also silently ignore version bounds. Previously
+ attempts to apply bounds to these protocol versions would result in an
+ error. Now only the "version-flexible" SSL_CTX instances are subject to
+ limits in configuration files in command-line options.
+ [Viktor Dukhovni]
+
+ *) Handshake now fails if Extended Master Secret extension is dropped
+ on renegotiation.
+ [Tomas Mraz]
+
+ *) The Oracle Developer Studio compiler will start reporting deprecated APIs
+
Changes between 1.1.1f and 1.1.1g [21 Apr 2020]
*) Fixed segmentation fault in SSL_check_chain()
diff --git a/crypto/openssl/Configure b/crypto/openssl/Configure
index 2e9efaa5f3da..1d73d06e1b3b 100755
--- a/crypto/openssl/Configure
+++ b/crypto/openssl/Configure
@@ -217,12 +217,22 @@ sub resolve_config;
# Unified build supports separate build dir
my $srcdir = catdir(absolutedir(dirname($0))); # catdir ensures local syntax
my $blddir = catdir(absolutedir(".")); # catdir ensures local syntax
+
+# File::Spec::Unix doesn't detect case insensitivity, so we make sure to
+# check if the source and build directory are really the same, and make
+# them so. This avoids all kinds of confusion later on.
+# We must check @File::Spec::ISA rather than using File::Spec->isa() to
+# know if File::Spec ended up loading File::Spec::Unix.
+$srcdir = $blddir
+ if (grep(/::Unix$/, @File::Spec::ISA)
+ && samedir($srcdir, $blddir));
+
my $dofile = abs2rel(catfile($srcdir, "util/dofile.pl"));
my $local_config_envname = 'OPENSSL_LOCAL_CONFIG_DIR';
-$config{sourcedir} = abs2rel($srcdir);
-$config{builddir} = abs2rel($blddir);
+$config{sourcedir} = abs2rel($srcdir, $blddir);
+$config{builddir} = abs2rel($blddir, $blddir);
# Collect reconfiguration information if needed
my @argvcopy=@ARGV;
@@ -1049,6 +1059,9 @@ if (scalar(@seed_sources) == 0) {
print "Using os-specific seed configuration\n";
push @seed_sources, 'os';
}
+if (scalar(grep { $_ eq 'egd' } @seed_sources) > 0) {
+ delete $disabled{'egd'};
+}
if (scalar(grep { $_ eq 'none' } @seed_sources) > 0) {
die "Cannot seed with none and anything else" if scalar(@seed_sources) > 1;
warn <<_____ if scalar(@seed_sources) == 1;
@@ -3424,6 +3437,27 @@ sub absolutedir {
return realpath($dir);
}
+# Check if all paths are one and the same, using stat. They must both exist
+# We need this for the cases when File::Spec doesn't detect case insensitivity
+# (File::Spec::Unix assumes case sensitivity)
+sub samedir {
+ die "samedir expects two arguments\n" unless scalar @_ == 2;
+
+ my @stat0 = stat($_[0]); # First argument
+ my @stat1 = stat($_[1]); # Second argument
+
+ die "Couldn't stat $_[0]" unless @stat0;
+ die "Couldn't stat $_[1]" unless @stat1;
+
+ # Compare device number
+ return 0 unless ($stat0[0] == $stat1[0]);
+ # Compare "inode". The perl manual recommends comparing as
+ # string rather than as number.
+ return 0 unless ($stat0[1] eq $stat1[1]);
+
+ return 1; # All the same
+}
+
sub quotify {
my %processors = (
perl => sub { my $x = shift;
diff --git a/crypto/openssl/NEWS b/crypto/openssl/NEWS
index 455b02dcb264..5529a260e4e5 100644
--- a/crypto/openssl/NEWS
+++ b/crypto/openssl/NEWS
@@ -5,6 +5,14 @@
This file gives a brief overview of the major changes between each OpenSSL
release. For more details please read the CHANGES file.
+ Major changes between OpenSSL 1.1.1g and OpenSSL 1.1.1h [22 Sep 2020]
+
+ o Disallow explicit curve parameters in verifications chains when
+ X509_V_FLAG_X509_STRICT is used
+ o Enable 'MinProtocol' and 'MaxProtocol' to configure both TLS and DTLS
+ contexts
+ o Oracle Developer Studio will start reporting deprecation warnings
+
Major changes between OpenSSL 1.1.1f and OpenSSL 1.1.1g [21 Apr 2020]
o Fixed segmentation fault in SSL_check_chain() (CVE-2020-1967)
diff --git a/crypto/openssl/NOTES.PERL b/crypto/openssl/NOTES.PERL
index 42c6127724b4..201b14386729 100644
--- a/crypto/openssl/NOTES.PERL
+++ b/crypto/openssl/NOTES.PERL
@@ -109,7 +109,7 @@
$ cpan -f -i Text::Template
- Note: on VMS, you must quote any argument that contains upper case
+ Note: on VMS, you must quote any argument that contains uppercase
characters, so the lines above would be:
$ cpan -i "Text::Template"
diff --git a/crypto/openssl/README b/crypto/openssl/README
index 46c2b537bed4..0bcce5b487cb 100644
--- a/crypto/openssl/README
+++ b/crypto/openssl/README
@@ -1,5 +1,5 @@
- OpenSSL 1.1.1g 21 Apr 2020
+ OpenSSL 1.1.1h 22 Sep 2020
Copyright (c) 1998-2020 The OpenSSL Project
Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
diff --git a/crypto/openssl/apps/genpkey.c b/crypto/openssl/apps/genpkey.c
index 39fa73c91cf4..3fe87e853c57 100644
--- a/crypto/openssl/apps/genpkey.c
+++ b/crypto/openssl/apps/genpkey.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -177,9 +177,12 @@ int genpkey_main(int argc, char **argv)
goto end;
}
+ ret = 0;
+
if (rv <= 0) {
BIO_puts(bio_err, "Error writing key\n");
ERR_print_errors(bio_err);
+ ret = 1;
}
if (text) {
@@ -191,11 +194,10 @@ int genpkey_main(int argc, char **argv)
if (rv <= 0) {
BIO_puts(bio_err, "Error printing key\n");
ERR_print_errors(bio_err);
+ ret = 1;
}
}
- ret = 0;
-
end:
EVP_PKEY_free(pkey);
EVP_PKEY_CTX_free(ctx);
diff --git a/crypto/openssl/apps/rsa8192.pem b/crypto/openssl/apps/rsa8192.pem
index 946a6e5433ce..83d962f40f0f 100644
--- a/crypto/openssl/apps/rsa8192.pem
+++ b/crypto/openssl/apps/rsa8192.pem
@@ -1,5 +1,4 @@
-----BEGIN RSA PRIVATE KEY-----
-
MIISKAIBAAKCBAEAiQ2f1X6Bte1DKD0OoCBKEikzPW+5w3oXk3WwnE97Wxzy6wJZ
ebbZC3CZKKBnJeBMrysPf+lK+9+fP6Vm8bp1wvbcSIA59BDrX6irFSuM/bdnkbuF
MFlDjt+uVrxwoyqfPi2IPot1HQg3l5mdyBqcTWvbOnU2L9HZxJfPUCjfzdTMPrMY
@@ -62,7 +61,7 @@ JH1/Qx7C/mTAMRsN5SkOthnGq0djCNWfPv/3JV0H67Uf5krFlnwLebrgfTYoPPdo
yO7iBUNJzv6Qh22malLp4P8gzACkD7DGlSTnoB5cLwcjmDGg+i9WrUBbOiVTeQfZ
kOj1o+Tz35ndpq/DDUVlqliB9krcxva+QHeJPH53EGI+YVg1nD+s/vUDZ3mQMGX9
DQou2L8uU6RnWNv/BihGcL8QvS4Ty6QyPOUPpD3zc70JQAEcQk9BxQNaELgJX0IN
-22cYn22tYvElew9G41OpDqzBRcfbdJmKXQ2HcroShutYJQRGUpAXHk24fy6JVkIU
+2cYUn22tYvElew9G41OpDqzBRcfbdJmKXQ2HcroShutYJQRGUpAXHk24fy6JVkIU
ojF5U6cwextMja1ZIIZgh9eugIRUeIE7319nQNDzuXWjRCcoBLA25P7wnpHWDRpz
D9ovXCIvdja74lL5psqobV6L5+fbLPkSgXoImKR0LQKCAgAIC9Jk8kxumCyIVGCP
PeM5Uby9M3GMuKrfYsn0Y5e97+kSJF1dpojTodBgR2KQar6eVrvXt+8uZCcIjfx8
@@ -98,4 +97,3 @@ TwEgE67iOb2iIoUpon/NyP4LesMzvdpsu2JFlfz13PmmQ34mFI7tWvOb3NA5DP3c
rMlMLtKfp2w8HlMZpsUlToNCx6CI+tJrohzcs3BAVAbjFAXRKWGijB1rxwyDdHPv
I+/wJTNaRNPQ1M0SwtEL/zJd21y3KSPn4eL+GP3efhlDSjtlDvZqkdAUsU8=
-----END RSA PRIVATE KEY-----
-
diff --git a/crypto/openssl/apps/s_client.c b/crypto/openssl/apps/s_client.c
index 26a6789d811a..83b3fc9c7f13 100644
--- a/crypto/openssl/apps/s_client.c
+++ b/crypto/openssl/apps/s_client.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
* Copyright 2005 Nokia. All rights reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
@@ -1283,22 +1283,42 @@ int s_client_main(int argc, char **argv)
case OPT_SSL3:
min_version = SSL3_VERSION;
max_version = SSL3_VERSION;
+ socket_type = SOCK_STREAM;
+#ifndef OPENSSL_NO_DTLS
+ isdtls = 0;
+#endif
break;
case OPT_TLS1_3:
min_version = TLS1_3_VERSION;
max_version = TLS1_3_VERSION;
+ socket_type = SOCK_STREAM;
+#ifndef OPENSSL_NO_DTLS
+ isdtls = 0;
+#endif
break;
case OPT_TLS1_2:
min_version = TLS1_2_VERSION;
max_version = TLS1_2_VERSION;
+ socket_type = SOCK_STREAM;
+#ifndef OPENSSL_NO_DTLS
+ isdtls = 0;
+#endif
break;
case OPT_TLS1_1:
min_version = TLS1_1_VERSION;
max_version = TLS1_1_VERSION;
+ socket_type = SOCK_STREAM;
+#ifndef OPENSSL_NO_DTLS
+ isdtls = 0;
+#endif
break;
case OPT_TLS1:
min_version = TLS1_VERSION;
max_version = TLS1_VERSION;
+ socket_type = SOCK_STREAM;
+#ifndef OPENSSL_NO_DTLS
+ isdtls = 0;
+#endif
break;
case OPT_DTLS:
#ifndef OPENSSL_NO_DTLS
diff --git a/crypto/openssl/apps/x509.c b/crypto/openssl/apps/x509.c
index 5bb110fe4a0a..1043eba0c8a0 100644
--- a/crypto/openssl/apps/x509.c
+++ b/crypto/openssl/apps/x509.c
@@ -140,9 +140,9 @@ const OPTIONS x509_options[] = {
{"", OPT_MD, '-', "Any supported digest"},
#ifndef OPENSSL_NO_MD5
{"subject_hash_old", OPT_SUBJECT_HASH_OLD, '-',
- "Print old-style (MD5) issuer hash value"},
- {"issuer_hash_old", OPT_ISSUER_HASH_OLD, '-',
"Print old-style (MD5) subject hash value"},
+ {"issuer_hash_old", OPT_ISSUER_HASH_OLD, '-',
+ "Print old-style (MD5) issuer hash value"},
#endif
#ifndef OPENSSL_NO_ENGINE
{"engine", OPT_ENGINE, 's', "Use engine, possibly a hardware device"},
diff --git a/crypto/openssl/appveyor.yml b/crypto/openssl/appveyor.yml
index 242d6a9ffe6f..6210391f204a 100644
--- a/crypto/openssl/appveyor.yml
+++ b/crypto/openssl/appveyor.yml
@@ -46,7 +46,8 @@ before_build:
- cd ..
- ps: >-
if (-not $env:APPVEYOR_PULL_REQUEST_NUMBER`
- -or (&git log -2 | Select-String "\[extended tests\]") ) {
+ -or (&git log -1 $env:APPVEYOR_PULL_REQUEST_HEAD_COMMIT |
+ Select-String "\[extended tests\]") ) {
$env:EXTENDED_TESTS="yes"
}
diff --git a/crypto/openssl/crypto/aes/aes_core.c b/crypto/openssl/crypto/aes/aes_core.c
index 687dd5829baa..ad00c729e700 100644
--- a/crypto/openssl/crypto/aes/aes_core.c
+++ b/crypto/openssl/crypto/aes/aes_core.c
@@ -673,357 +673,6 @@ void AES_decrypt(const unsigned char *in, unsigned char *out,
InvCipher(in, out, rk, key->rounds);
}
-
-# ifndef OPENSSL_SMALL_FOOTPRINT
-void AES_ctr32_encrypt(const unsigned char *in, unsigned char *out,
- size_t blocks, const AES_KEY *key,
- const unsigned char *ivec);
-
-static void RawToBits(const u8 raw[64], u64 bits[8])
-{
- int i, j;
- u64 in, out;
-
- memset(bits, 0, 64);
- for (i = 0; i < 8; i++) {
- in = 0;
- for (j = 0; j < 8; j++)
- in |= ((u64)raw[i * 8 + j]) << (8 * j);
- out = in & 0xF0F0F0F00F0F0F0FuLL;
- out |= (in & 0x0F0F0F0F00000000uLL) >> 28;
- out |= (in & 0x00000000F0F0F0F0uLL) << 28;
- in = out & 0xCCCC3333CCCC3333uLL;
- in |= (out & 0x3333000033330000uLL) >> 14;
- in |= (out & 0x0000CCCC0000CCCCuLL) << 14;
- out = in & 0xAA55AA55AA55AA55uLL;
- out |= (in & 0x5500550055005500uLL) >> 7;
- out |= (in & 0x00AA00AA00AA00AAuLL) << 7;
- for (j = 0; j < 8; j++) {
- bits[j] |= (out & 0xFFuLL) << (8 * i);
- out = out >> 8;
- }
- }
-}
-
-static void BitsToRaw(const u64 bits[8], u8 raw[64])
-{
- int i, j;
- u64 in, out;
-
- for (i = 0; i < 8; i++) {
- in = 0;
- for (j = 0; j < 8; j++)
- in |= ((bits[j] >> (8 * i)) & 0xFFuLL) << (8 * j);
- out = in & 0xF0F0F0F00F0F0F0FuLL;
- out |= (in & 0x0F0F0F0F00000000uLL) >> 28;
- out |= (in & 0x00000000F0F0F0F0uLL) << 28;
- in = out & 0xCCCC3333CCCC3333uLL;
- in |= (out & 0x3333000033330000uLL) >> 14;
- in |= (out & 0x0000CCCC0000CCCCuLL) << 14;
- out = in & 0xAA55AA55AA55AA55uLL;
- out |= (in & 0x5500550055005500uLL) >> 7;
- out |= (in & 0x00AA00AA00AA00AAuLL) << 7;
- for (j = 0; j < 8; j++) {
- raw[i * 8 + j] = (u8)out;
- out = out >> 8;
- }
- }
-}
-
-static void BitsXtime(u64 state[8])
-{
- u64 b;
-
- b = state[7];
- state[7] = state[6];
- state[6] = state[5];
- state[5] = state[4];
- state[4] = state[3] ^ b;
- state[3] = state[2] ^ b;
- state[2] = state[1];
- state[1] = state[0] ^ b;
- state[0] = b;
-}
-
-/*
- * This S-box implementation follows a circuit described in
- * Boyar and Peralta: "A new combinational logic minimization
- * technique with applications to cryptology."
- * https://eprint.iacr.org/2009/191.pdf
- *
- * The math is similar to above, in that it uses
- * a tower field of GF(2^2^2^2) but with a different
- * basis representation, that is better suited to
- * logic designs.
- */
-static void BitsSub(u64 state[8])
-{
- u64 x0, x1, x2, x3, x4, x5, x6, x7;
- u64 y1, y2, y3, y4, y5, y6, y7, y8, y9, y10, y11;
- u64 y12, y13, y14, y15, y16, y17, y18, y19, y20, y21;
- u64 t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11;
- u64 t12, t13, t14, t15, t16, t17, t18, t19, t20, t21;
- u64 t22, t23, t24, t25, t26, t27, t28, t29, t30, t31;
- u64 t32, t33, t34, t35, t36, t37, t38, t39, t40, t41;
- u64 t42, t43, t44, t45, t46, t47, t48, t49, t50, t51;
- u64 t52, t53, t54, t55, t56, t57, t58, t59, t60, t61;
- u64 t62, t63, t64, t65, t66, t67;
- u64 z0, z1, z2, z3, z4, z5, z6, z7, z8, z9, z10, z11;
- u64 z12, z13, z14, z15, z16, z17;
- u64 s0, s1, s2, s3, s4, s5, s6, s7;
-
- x7 = state[0];
- x6 = state[1];
- x5 = state[2];
- x4 = state[3];
- x3 = state[4];
- x2 = state[5];
- x1 = state[6];
- x0 = state[7];
- y14 = x3 ^ x5;
- y13 = x0 ^ x6;
- y9 = x0 ^ x3;
- y8 = x0 ^ x5;
- t0 = x1 ^ x2;
- y1 = t0 ^ x7;
- y4 = y1 ^ x3;
- y12 = y13 ^ y14;
- y2 = y1 ^ x0;
- y5 = y1 ^ x6;
- y3 = y5 ^ y8;
- t1 = x4 ^ y12;
- y15 = t1 ^ x5;
- y20 = t1 ^ x1;
- y6 = y15 ^ x7;
- y10 = y15 ^ t0;
- y11 = y20 ^ y9;
- y7 = x7 ^ y11;
- y17 = y10 ^ y11;
- y19 = y10 ^ y8;
- y16 = t0 ^ y11;
- y21 = y13 ^ y16;
- y18 = x0 ^ y16;
- t2 = y12 & y15;
- t3 = y3 & y6;
- t4 = t3 ^ t2;
- t5 = y4 & x7;
- t6 = t5 ^ t2;
- t7 = y13 & y16;
- t8 = y5 & y1;
- t9 = t8 ^ t7;
- t10 = y2 & y7;
- t11 = t10 ^ t7;
- t12 = y9 & y11;
- t13 = y14 & y17;
- t14 = t13 ^ t12;
- t15 = y8 & y10;
- t16 = t15 ^ t12;
- t17 = t4 ^ t14;
- t18 = t6 ^ t16;
- t19 = t9 ^ t14;
- t20 = t11 ^ t16;
- t21 = t17 ^ y20;
- t22 = t18 ^ y19;
- t23 = t19 ^ y21;
- t24 = t20 ^ y18;
- t25 = t21 ^ t22;
- t26 = t21 & t23;
- t27 = t24 ^ t26;
- t28 = t25 & t27;
- t29 = t28 ^ t22;
- t30 = t23 ^ t24;
- t31 = t22 ^ t26;
- t32 = t31 & t30;
- t33 = t32 ^ t24;
- t34 = t23 ^ t33;
- t35 = t27 ^ t33;
- t36 = t24 & t35;
- t37 = t36 ^ t34;
- t38 = t27 ^ t36;
- t39 = t29 & t38;
- t40 = t25 ^ t39;
- t41 = t40 ^ t37;
- t42 = t29 ^ t33;
- t43 = t29 ^ t40;
- t44 = t33 ^ t37;
- t45 = t42 ^ t41;
- z0 = t44 & y15;
- z1 = t37 & y6;
- z2 = t33 & x7;
- z3 = t43 & y16;
- z4 = t40 & y1;
- z5 = t29 & y7;
- z6 = t42 & y11;
- z7 = t45 & y17;
- z8 = t41 & y10;
- z9 = t44 & y12;
- z10 = t37 & y3;
- z11 = t33 & y4;
- z12 = t43 & y13;
- z13 = t40 & y5;
- z14 = t29 & y2;
- z15 = t42 & y9;
- z16 = t45 & y14;
- z17 = t41 & y8;
- t46 = z15 ^ z16;
- t47 = z10 ^ z11;
- t48 = z5 ^ z13;
- t49 = z9 ^ z10;
- t50 = z2 ^ z12;
- t51 = z2 ^ z5;
- t52 = z7 ^ z8;
- t53 = z0 ^ z3;
- t54 = z6 ^ z7;
- t55 = z16 ^ z17;
- t56 = z12 ^ t48;
- t57 = t50 ^ t53;
- t58 = z4 ^ t46;
- t59 = z3 ^ t54;
- t60 = t46 ^ t57;
- t61 = z14 ^ t57;
- t62 = t52 ^ t58;
- t63 = t49 ^ t58;
- t64 = z4 ^ t59;
- t65 = t61 ^ t62;
- t66 = z1 ^ t63;
- s0 = t59 ^ t63;
- s6 = ~(t56 ^ t62);
- s7 = ~(t48 ^ t60);
- t67 = t64 ^ t65;
- s3 = t53 ^ t66;
- s4 = t51 ^ t66;
- s5 = t47 ^ t65;
- s1 = ~(t64 ^ s3);
- s2 = ~(t55 ^ t67);
- state[0] = s7;
- state[1] = s6;
- state[2] = s5;
- state[3] = s4;
- state[4] = s3;
- state[5] = s2;
- state[6] = s1;
- state[7] = s0;
-}
-
-static void BitsShiftRows(u64 state[8])
-{
- u64 s, s0;
- int i;
-
- for (i = 0; i < 8; i++) {
- s = state[i];
- s0 = s & 0x1111111111111111uLL;
- s0 |= ((s & 0x2220222022202220uLL) >> 4) | ((s & 0x0002000200020002uLL) << 12);
- s0 |= ((s & 0x4400440044004400uLL) >> 8) | ((s & 0x0044004400440044uLL) << 8);
- s0 |= ((s & 0x8000800080008000uLL) >> 12) | ((s & 0x0888088808880888uLL) << 4);
- state[i] = s0;
- }
-}
-
-static void BitsMixColumns(u64 state[8])
-{
- u64 s1, s;
- u64 s0[8];
- int i;
-
- for (i = 0; i < 8; i++) {
- s1 = state[i];
- s = s1;
- s ^= ((s & 0xCCCCCCCCCCCCCCCCuLL) >> 2) | ((s & 0x3333333333333333uLL) << 2);
- s ^= ((s & 0xAAAAAAAAAAAAAAAAuLL) >> 1) | ((s & 0x5555555555555555uLL) << 1);
- s ^= s1;
- s0[i] = s;
- }
- BitsXtime(state);
- for (i = 0; i < 8; i++) {
- s1 = state[i];
- s = s0[i];
- s ^= s1;
- s ^= ((s1 & 0xEEEEEEEEEEEEEEEEuLL) >> 1) | ((s1 & 0x1111111111111111uLL) << 3);
- state[i] = s;
- }
-}
-
-static void BitsAddRoundKey(u64 state[8], const u64 key[8])
-{
- int i;
-
- for (i = 0; i < 8; i++)
- state[i] ^= key[i];
-}
-
-void AES_ctr32_encrypt(const unsigned char *in, unsigned char *out,
- size_t blocks, const AES_KEY *key,
- const unsigned char *ivec)
-{
- struct {
- u8 cipher[64];
- u64 state[8];
- u64 rd_key[AES_MAXNR + 1][8];
- } *bs;
- u32 ctr32;
- int i;
-
- ctr32 = GETU32(ivec + 12);
- if (blocks >= 4
- && (bs = OPENSSL_malloc(sizeof(*bs)))) {
- for (i = 0; i < key->rounds + 1; i++) {
- memcpy(bs->cipher + 0, &key->rd_key[4 * i], 16);
- memcpy(bs->cipher + 16, bs->cipher, 16);
- memcpy(bs->cipher + 32, bs->cipher, 32);
- RawToBits(bs->cipher, bs->rd_key[i]);
- }
- while (blocks) {
- memcpy(bs->cipher, ivec, 12);
- PUTU32(bs->cipher + 12, ctr32);
- ctr32++;
- memcpy(bs->cipher + 16, ivec, 12);
- PUTU32(bs->cipher + 28, ctr32);
- ctr32++;
- memcpy(bs->cipher + 32, ivec, 12);
- PUTU32(bs->cipher + 44, ctr32);
- ctr32++;
- memcpy(bs->cipher + 48, ivec, 12);
- PUTU32(bs->cipher + 60, ctr32);
- ctr32++;
- RawToBits(bs->cipher, bs->state);
- BitsAddRoundKey(bs->state, bs->rd_key[0]);
- for (i = 1; i < key->rounds; i++) {
- BitsSub(bs->state);
- BitsShiftRows(bs->state);
- BitsMixColumns(bs->state);
- BitsAddRoundKey(bs->state, bs->rd_key[i]);
- }
- BitsSub(bs->state);
- BitsShiftRows(bs->state);
- BitsAddRoundKey(bs->state, bs->rd_key[key->rounds]);
- BitsToRaw(bs->state, bs->cipher);
- for (i = 0; i < 64 && blocks; i++) {
- out[i] = in[i] ^ bs->cipher[i];
- if ((i & 15) == 15)
- blocks--;
- }
- in += i;
- out += i;
- }
- OPENSSL_clear_free(bs, sizeof(*bs));
- } else {
- unsigned char cipher[16];
-
- while (blocks) {
- memcpy(cipher, ivec, 12);
- PUTU32(cipher + 12, ctr32);
- AES_encrypt(cipher, cipher, key);
- for (i = 0; i < 16; i++)
- out[i] = in[i] ^ cipher[i];
- in += 16;
- out += 16;
- ctr32++;
- blocks--;
- }
- }
-}
-# endif
#elif !defined(AES_ASM)
/*-
Te0[x] = S [x].[02, 01, 01, 03];
diff --git a/crypto/openssl/crypto/aes/aes_ige.c b/crypto/openssl/crypto/aes/aes_ige.c
index dce4ef11be4f..804b3a723d1f 100644
--- a/crypto/openssl/crypto/aes/aes_ige.c
+++ b/crypto/openssl/crypto/aes/aes_ige.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -12,11 +12,6 @@
#include <openssl/aes.h>
#include "aes_local.h"
-#define N_WORDS (AES_BLOCK_SIZE / sizeof(unsigned long))
-typedef struct {
- unsigned long data[N_WORDS];
-} aes_block_t;
-
/* XXX: probably some better way to do this */
#if defined(__i386__) || defined(__x86_64__)
# define UNALIGNED_MEMOPS_ARE_FAST 1
@@ -24,6 +19,15 @@ typedef struct {
# define UNALIGNED_MEMOPS_ARE_FAST 0
#endif
+#define N_WORDS (AES_BLOCK_SIZE / sizeof(unsigned long))
+typedef struct {
+ unsigned long data[N_WORDS];
+#if defined(__GNUC__) && UNALIGNED_MEMOPS_ARE_FAST
+} aes_block_t __attribute((__aligned__(1)));
+#else
+} aes_block_t;
+#endif
+
#if UNALIGNED_MEMOPS_ARE_FAST
# define load_block(d, s) (d) = *(const aes_block_t *)(s)
# define store_block(d, s) *(aes_block_t *)(d) = (s)
diff --git a/crypto/openssl/crypto/asn1/d2i_pr.c b/crypto/openssl/crypto/asn1/d2i_pr.c
index 6ec010738049..7b127d2092fa 100644
--- a/crypto/openssl/crypto/asn1/d2i_pr.c
+++ b/crypto/openssl/crypto/asn1/d2i_pr.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -56,6 +56,8 @@ EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp,
goto err;
EVP_PKEY_free(ret);
ret = tmp;
+ if (EVP_PKEY_type(type) != EVP_PKEY_base_id(ret))
+ goto err;
} else {
ASN1err(ASN1_F_D2I_PRIVATEKEY, ERR_R_ASN1_LIB);
goto err;
diff --git a/crypto/openssl/crypto/asn1/x_algor.c b/crypto/openssl/crypto/asn1/x_algor.c
index 4c4a718850ee..c9a8f1e9d1d4 100644
--- a/crypto/openssl/crypto/asn1/x_algor.c
+++ b/crypto/openssl/crypto/asn1/x_algor.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1998-2016 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1998-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -92,3 +92,35 @@ int X509_ALGOR_cmp(const X509_ALGOR *a, const X509_ALGOR *b)
return 0;
return ASN1_TYPE_cmp(a->parameter, b->parameter);
}
+
+int X509_ALGOR_copy(X509_ALGOR *dest, const X509_ALGOR *src)
+{
+ if (src == NULL || dest == NULL)
+ return 0;
+
+ if (dest->algorithm)
+ ASN1_OBJECT_free(dest->algorithm);
+ dest->algorithm = NULL;
+
+ if (dest->parameter)
+ ASN1_TYPE_free(dest->parameter);
+ dest->parameter = NULL;
+
+ if (src->algorithm)
+ if ((dest->algorithm = OBJ_dup(src->algorithm)) == NULL)
+ return 0;
+
+ if (src->parameter) {
+ dest->parameter = ASN1_TYPE_new();
+ if (dest->parameter == NULL)
+ return 0;
+
+ /* Assuming this is also correct for a BOOL.
+ * set does copy as a side effect.
+ */
+ if (ASN1_TYPE_set1(dest->parameter,
+ src->parameter->type, src->parameter->value.ptr) == 0)
+ return 0;
+ }
+ return 1;
+}
diff --git a/crypto/openssl/crypto/bio/b_print.c b/crypto/openssl/crypto/bio/b_print.c
index 8ef90ac1d4f8..41b7f5e2f61d 100644
--- a/crypto/openssl/crypto/bio/b_print.c
+++ b/crypto/openssl/crypto/bio/b_print.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -635,7 +635,11 @@ fmtfp(char **sbuffer,
fvalue = tmpvalue;
}
ufvalue = abs_val(fvalue);
- if (ufvalue > ULONG_MAX) {
+ /*
+ * By subtracting 65535 (2^16-1) we cancel the low order 15 bits
+ * of ULONG_MAX to avoid using imprecise floating point values.
+ */
+ if (ufvalue >= (double)(ULONG_MAX - 65535) + 65536.0) {
/* Number too big */
return 0;
}
diff --git a/crypto/openssl/crypto/bio/bss_acpt.c b/crypto/openssl/crypto/bio/bss_acpt.c
index 5a2cb50dfc39..4461eae2333d 100644
--- a/crypto/openssl/crypto/bio/bss_acpt.c
+++ b/crypto/openssl/crypto/bio/bss_acpt.c
@@ -434,8 +434,10 @@ static long acpt_ctrl(BIO *b, int cmd, long num, void *ptr)
b->init = 1;
} else if (num == 1) {
OPENSSL_free(data->param_serv);
- data->param_serv = BUF_strdup(ptr);
- b->init = 1;
+ if ((data->param_serv = OPENSSL_strdup(ptr)) == NULL)
+ ret = 0;
+ else
+ b->init = 1;
} else if (num == 2) {
data->bind_mode |= BIO_SOCK_NONBLOCK;
} else if (num == 3) {
diff --git a/crypto/openssl/crypto/bio/bss_conn.c b/crypto/openssl/crypto/bio/bss_conn.c
index dd43a406018c..807a82b23ba2 100644
--- a/crypto/openssl/crypto/bio/bss_conn.c
+++ b/crypto/openssl/crypto/bio/bss_conn.c
@@ -186,8 +186,17 @@ static int conn_state(BIO *b, BIO_CONNECT *c)
case BIO_CONN_S_BLOCKED_CONNECT:
i = BIO_sock_error(b->num);
- if (i) {
+ if (i != 0) {
BIO_clear_retry_flags(b);
+ if ((c->addr_iter = BIO_ADDRINFO_next(c->addr_iter)) != NULL) {
+ /*
+ * if there are more addresses to try, do that first
+ */
+ BIO_closesocket(b->num);
+ c->state = BIO_CONN_S_CREATE_SOCKET;
+ ERR_clear_error();
+ break;
+ }
SYSerr(SYS_F_CONNECT, i);
ERR_add_error_data(4,
"hostname=", c->param_hostname,
@@ -407,12 +416,13 @@ static long conn_ctrl(BIO *b, int cmd, long num, void *ptr)
case BIO_C_SET_CONNECT:
if (ptr != NULL) {
b->init = 1;
- if (num == 0) {
+ if (num == 0) { /* BIO_set_conn_hostname */
char *hold_service = data->param_service;
/* We affect the hostname regardless. However, the input
* string might contain a host:service spec, so we must
* parse it, which might or might not affect the service
*/
+
OPENSSL_free(data->param_hostname);
data->param_hostname = NULL;
ret = BIO_parse_hostserv(ptr,
@@ -421,19 +431,29 @@ static long conn_ctrl(BIO *b, int cmd, long num, void *ptr)
BIO_PARSE_PRIO_HOST);
if (hold_service != data->param_service)
OPENSSL_free(hold_service);
- } else if (num == 1) {
+ } else if (num == 1) { /* BIO_set_conn_port */
OPENSSL_free(data->param_service);
- data->param_service = BUF_strdup(ptr);
- } else if (num == 2) {
+ if ((data->param_service = OPENSSL_strdup(ptr)) == NULL)
+ ret = 0;
+ } else if (num == 2) { /* BIO_set_conn_address */
const BIO_ADDR *addr = (const BIO_ADDR *)ptr;
+ char *host = BIO_ADDR_hostname_string(addr, 1);
+ char *service = BIO_ADDR_service_string(addr, 1);
+
+ ret = host != NULL && service != NULL;
if (ret) {
- data->param_hostname = BIO_ADDR_hostname_string(addr, 1);
- data->param_service = BIO_ADDR_service_string(addr, 1);
+ OPENSSL_free(data->param_hostname);
+ data->param_hostname = host;
+ OPENSSL_free(data->param_service);
+ data->param_service = service;
BIO_ADDRINFO_free(data->addr_first);
data->addr_first = NULL;
data->addr_iter = NULL;
+ } else {
+ OPENSSL_free(host);
+ OPENSSL_free(service);
}
- } else if (num == 3) {
+ } else if (num == 3) { /* BIO_set_conn_ip_family */
data->connect_family = *(int *)ptr;
} else {
ret = 0;
diff --git a/crypto/openssl/crypto/bn/bn_gcd.c b/crypto/openssl/crypto/bn/bn_gcd.c
index ef81acb77ba6..0941f7b97f3f 100644
--- a/crypto/openssl/crypto/bn/bn_gcd.c
+++ b/crypto/openssl/crypto/bn/bn_gcd.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -10,22 +10,189 @@
#include "internal/cryptlib.h"
#include "bn_local.h"
-/* solves ax == 1 (mod n) */
-static BIGNUM *BN_mod_inverse_no_branch(BIGNUM *in,
- const BIGNUM *a, const BIGNUM *n,
- BN_CTX *ctx);
-
-BIGNUM *BN_mod_inverse(BIGNUM *in,
- const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx)
+/*
+ * bn_mod_inverse_no_branch is a special version of BN_mod_inverse. It does
+ * not contain branches that may leak sensitive information.
+ *
+ * This is a static function, we ensure all callers in this file pass valid
+ * arguments: all passed pointers here are non-NULL.
+ */
+static ossl_inline
+BIGNUM *bn_mod_inverse_no_branch(BIGNUM *in,
+ const BIGNUM *a, const BIGNUM *n,
+ BN_CTX *ctx, int *pnoinv)
{
- BIGNUM *rv;
- int noinv;
- rv = int_bn_mod_inverse(in, a, n, ctx, &noinv);
- if (noinv)
- BNerr(BN_F_BN_MOD_INVERSE, BN_R_NO_INVERSE);
- return rv;
+ BIGNUM *A, *B, *X, *Y, *M, *D, *T, *R = NULL;
+ BIGNUM *ret = NULL;
+ int sign;
+
+ bn_check_top(a);
+ bn_check_top(n);
+
+ BN_CTX_start(ctx);
+ A = BN_CTX_get(ctx);
+ B = BN_CTX_get(ctx);
+ X = BN_CTX_get(ctx);
+ D = BN_CTX_get(ctx);
+ M = BN_CTX_get(ctx);
+ Y = BN_CTX_get(ctx);
+ T = BN_CTX_get(ctx);
+ if (T == NULL)
+ goto err;
+
+ if (in == NULL)
+ R = BN_new();
+ else
+ R = in;
+ if (R == NULL)
+ goto err;
+
+ BN_one(X);
+ BN_zero(Y);
+ if (BN_copy(B, a) == NULL)
+ goto err;
+ if (BN_copy(A, n) == NULL)
+ goto err;
+ A->neg = 0;
+
+ if (B->neg || (BN_ucmp(B, A) >= 0)) {
+ /*
+ * Turn BN_FLG_CONSTTIME flag on, so that when BN_div is invoked,
+ * BN_div_no_branch will be called eventually.
+ */
+ {
+ BIGNUM local_B;
+ bn_init(&local_B);
+ BN_with_flags(&local_B, B, BN_FLG_CONSTTIME);
+ if (!BN_nnmod(B, &local_B, A, ctx))
+ goto err;
+ /* Ensure local_B goes out of scope before any further use of B */
+ }
+ }
+ sign = -1;
+ /*-
+ * From B = a mod |n|, A = |n| it follows that
+ *
+ * 0 <= B < A,
+ * -sign*X*a == B (mod |n|),
+ * sign*Y*a == A (mod |n|).
+ */
+
+ while (!BN_is_zero(B)) {
+ BIGNUM *tmp;
+
+ /*-
+ * 0 < B < A,
+ * (*) -sign*X*a == B (mod |n|),
+ * sign*Y*a == A (mod |n|)
+ */
+
+ /*
+ * Turn BN_FLG_CONSTTIME flag on, so that when BN_div is invoked,
+ * BN_div_no_branch will be called eventually.
+ */
+ {
+ BIGNUM local_A;
+ bn_init(&local_A);
+ BN_with_flags(&local_A, A, BN_FLG_CONSTTIME);
+
+ /* (D, M) := (A/B, A%B) ... */
+ if (!BN_div(D, M, &local_A, B, ctx))
+ goto err;
+ /* Ensure local_A goes out of scope before any further use of A */
+ }
+
+ /*-
+ * Now
+ * A = D*B + M;
+ * thus we have
+ * (**) sign*Y*a == D*B + M (mod |n|).
+ */
+
+ tmp = A; /* keep the BIGNUM object, the value does not
+ * matter */
+
+ /* (A, B) := (B, A mod B) ... */
+ A = B;
+ B = M;
+ /* ... so we have 0 <= B < A again */
+
+ /*-
+ * Since the former M is now B and the former B is now A,
+ * (**) translates into
+ * sign*Y*a == D*A + B (mod |n|),
+ * i.e.
+ * sign*Y*a - D*A == B (mod |n|).
+ * Similarly, (*) translates into
+ * -sign*X*a == A (mod |n|).
+ *
+ * Thus,
+ * sign*Y*a + D*sign*X*a == B (mod |n|),
+ * i.e.
+ * sign*(Y + D*X)*a == B (mod |n|).
+ *
+ * So if we set (X, Y, sign) := (Y + D*X, X, -sign), we arrive back at
+ * -sign*X*a == B (mod |n|),
+ * sign*Y*a == A (mod |n|).
+ * Note that X and Y stay non-negative all the time.
+ */
+
+ if (!BN_mul(tmp, D, X, ctx))
+ goto err;
+ if (!BN_add(tmp, tmp, Y))
+ goto err;
+
+ M = Y; /* keep the BIGNUM object, the value does not
+ * matter */
+ Y = X;
+ X = tmp;
+ sign = -sign;
+ }
+
+ /*-
+ * The while loop (Euclid's algorithm) ends when
+ * A == gcd(a,n);
+ * we have
+ * sign*Y*a == A (mod |n|),
+ * where Y is non-negative.
+ */
+
+ if (sign < 0) {
+ if (!BN_sub(Y, n, Y))
+ goto err;
+ }
+ /* Now Y*a == A (mod |n|). */
+
+ if (BN_is_one(A)) {
+ /* Y*a == 1 (mod |n|) */
+ if (!Y->neg && BN_ucmp(Y, n) < 0) {
+ if (!BN_copy(R, Y))
+ goto err;
+ } else {
+ if (!BN_nnmod(R, Y, n, ctx))
+ goto err;
+ }
+ } else {
+ *pnoinv = 1;
+ /* caller sets the BN_R_NO_INVERSE error */
+ goto err;
+ }
+
+ ret = R;
+ *pnoinv = 0;
+
+ err:
+ if ((ret == NULL) && (in == NULL))
+ BN_free(R);
+ BN_CTX_end(ctx);
+ bn_check_top(ret);
+ return ret;
}
+/*
+ * This is an internal function, we assume all callers pass valid arguments:
+ * all pointers passed here are assumed non-NULL.
+ */
BIGNUM *int_bn_mod_inverse(BIGNUM *in,
const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx,
int *pnoinv)
@@ -36,17 +203,15 @@ BIGNUM *int_bn_mod_inverse(BIGNUM *in,
/* This is invalid input so we don't worry about constant time here */
if (BN_abs_is_word(n, 1) || BN_is_zero(n)) {
- if (pnoinv != NULL)
- *pnoinv = 1;
+ *pnoinv = 1;
return NULL;
}
- if (pnoinv != NULL)
- *pnoinv = 0;
+ *pnoinv = 0;
if ((BN_get_flags(a, BN_FLG_CONSTTIME) != 0)
|| (BN_get_flags(n, BN_FLG_CONSTTIME) != 0)) {
- return BN_mod_inverse_no_branch(in, a, n, ctx);
+ return bn_mod_inverse_no_branch(in, a, n, ctx, pnoinv);
}
bn_check_top(a);
@@ -332,8 +497,7 @@ BIGNUM *int_bn_mod_inverse(BIGNUM *in,
goto err;
}
} else {
- if (pnoinv)
- *pnoinv = 1;
+ *pnoinv = 1;
goto err;
}
ret = R;
@@ -345,175 +509,27 @@ BIGNUM *int_bn_mod_inverse(BIGNUM *in,
return ret;
}
-/*
- * BN_mod_inverse_no_branch is a special version of BN_mod_inverse. It does
- * not contain branches that may leak sensitive information.
- */
-static BIGNUM *BN_mod_inverse_no_branch(BIGNUM *in,
- const BIGNUM *a, const BIGNUM *n,
- BN_CTX *ctx)
+/* solves ax == 1 (mod n) */
+BIGNUM *BN_mod_inverse(BIGNUM *in,
+ const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx)
{
- BIGNUM *A, *B, *X, *Y, *M, *D, *T, *R = NULL;
- BIGNUM *ret = NULL;
- int sign;
-
- bn_check_top(a);
- bn_check_top(n);
-
- BN_CTX_start(ctx);
- A = BN_CTX_get(ctx);
- B = BN_CTX_get(ctx);
- X = BN_CTX_get(ctx);
- D = BN_CTX_get(ctx);
- M = BN_CTX_get(ctx);
- Y = BN_CTX_get(ctx);
- T = BN_CTX_get(ctx);
- if (T == NULL)
- goto err;
-
- if (in == NULL)
- R = BN_new();
- else
- R = in;
- if (R == NULL)
- goto err;
-
- BN_one(X);
- BN_zero(Y);
- if (BN_copy(B, a) == NULL)
- goto err;
- if (BN_copy(A, n) == NULL)
- goto err;
- A->neg = 0;
-
- if (B->neg || (BN_ucmp(B, A) >= 0)) {
- /*
- * Turn BN_FLG_CONSTTIME flag on, so that when BN_div is invoked,
- * BN_div_no_branch will be called eventually.
- */
- {
- BIGNUM local_B;
- bn_init(&local_B);
- BN_with_flags(&local_B, B, BN_FLG_CONSTTIME);
- if (!BN_nnmod(B, &local_B, A, ctx))
- goto err;
- /* Ensure local_B goes out of scope before any further use of B */
- }
- }
- sign = -1;
- /*-
- * From B = a mod |n|, A = |n| it follows that
- *
- * 0 <= B < A,
- * -sign*X*a == B (mod |n|),
- * sign*Y*a == A (mod |n|).
- */
-
- while (!BN_is_zero(B)) {
- BIGNUM *tmp;
-
- /*-
- * 0 < B < A,
- * (*) -sign*X*a == B (mod |n|),
- * sign*Y*a == A (mod |n|)
- */
-
- /*
- * Turn BN_FLG_CONSTTIME flag on, so that when BN_div is invoked,
- * BN_div_no_branch will be called eventually.
- */
- {
- BIGNUM local_A;
- bn_init(&local_A);
- BN_with_flags(&local_A, A, BN_FLG_CONSTTIME);
+ BN_CTX *new_ctx = NULL;
+ BIGNUM *rv;
+ int noinv = 0;
- /* (D, M) := (A/B, A%B) ... */
- if (!BN_div(D, M, &local_A, B, ctx))
- goto err;
- /* Ensure local_A goes out of scope before any further use of A */
+ if (ctx == NULL) {
+ ctx = new_ctx = BN_CTX_new();
+ if (ctx == NULL) {
+ BNerr(BN_F_BN_MOD_INVERSE, ERR_R_MALLOC_FAILURE);
+ return NULL;
}
-
- /*-
- * Now
- * A = D*B + M;
- * thus we have
- * (**) sign*Y*a == D*B + M (mod |n|).
- */
-
- tmp = A; /* keep the BIGNUM object, the value does not
- * matter */
-
- /* (A, B) := (B, A mod B) ... */
- A = B;
- B = M;
- /* ... so we have 0 <= B < A again */
-
- /*-
- * Since the former M is now B and the former B is now A,
- * (**) translates into
- * sign*Y*a == D*A + B (mod |n|),
- * i.e.
- * sign*Y*a - D*A == B (mod |n|).
- * Similarly, (*) translates into
- * -sign*X*a == A (mod |n|).
- *
- * Thus,
- * sign*Y*a + D*sign*X*a == B (mod |n|),
- * i.e.
- * sign*(Y + D*X)*a == B (mod |n|).
- *
- * So if we set (X, Y, sign) := (Y + D*X, X, -sign), we arrive back at
- * -sign*X*a == B (mod |n|),
- * sign*Y*a == A (mod |n|).
- * Note that X and Y stay non-negative all the time.
- */
-
- if (!BN_mul(tmp, D, X, ctx))
- goto err;
- if (!BN_add(tmp, tmp, Y))
- goto err;
-
- M = Y; /* keep the BIGNUM object, the value does not
- * matter */
- Y = X;
- X = tmp;
- sign = -sign;
- }
-
- /*-
- * The while loop (Euclid's algorithm) ends when
- * A == gcd(a,n);
- * we have
- * sign*Y*a == A (mod |n|),
- * where Y is non-negative.
- */
-
- if (sign < 0) {
- if (!BN_sub(Y, n, Y))
- goto err;
}
- /* Now Y*a == A (mod |n|). */
- if (BN_is_one(A)) {
- /* Y*a == 1 (mod |n|) */
- if (!Y->neg && BN_ucmp(Y, n) < 0) {
- if (!BN_copy(R, Y))
- goto err;
- } else {
- if (!BN_nnmod(R, Y, n, ctx))
- goto err;
- }
- } else {
- BNerr(BN_F_BN_MOD_INVERSE_NO_BRANCH, BN_R_NO_INVERSE);
- goto err;
- }
- ret = R;
- err:
- if ((ret == NULL) && (in == NULL))
- BN_free(R);
- BN_CTX_end(ctx);
- bn_check_top(ret);
- return ret;
+ rv = int_bn_mod_inverse(in, a, n, ctx, &noinv);
+ if (noinv)
+ BNerr(BN_F_BN_MOD_INVERSE, BN_R_NO_INVERSE);
+ BN_CTX_free(new_ctx);
+ return rv;
}
/*-
diff --git a/crypto/openssl/crypto/bn/bn_lib.c b/crypto/openssl/crypto/bn/bn_lib.c
index 86d4956c8a8c..eb4a31849bef 100644
--- a/crypto/openssl/crypto/bn/bn_lib.c
+++ b/crypto/openssl/crypto/bn/bn_lib.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -87,6 +87,15 @@ const BIGNUM *BN_value_one(void)
return &const_one;
}
+/*
+ * Old Visual Studio ARM compiler miscompiles BN_num_bits_word()
+ * https://mta.openssl.org/pipermail/openssl-users/2018-August/008465.html
+ */
+#if defined(_MSC_VER) && defined(_ARM_) && defined(_WIN32_WCE) \
+ && _MSC_VER>=1400 && _MSC_VER<1501
+# define MS_BROKEN_BN_num_bits_word
+# pragma optimize("", off)
+#endif
int BN_num_bits_word(BN_ULONG l)
{
BN_ULONG x, mask;
@@ -131,6 +140,9 @@ int BN_num_bits_word(BN_ULONG l)
return bits;
}
+#ifdef MS_BROKEN_BN_num_bits_word
+# pragma optimize("", on)
+#endif
/*
* This function still leaks `a->dmax`: it's caller's responsibility to
@@ -322,15 +334,19 @@ BIGNUM *BN_dup(const BIGNUM *a)
BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b)
{
+ int bn_words;
+
bn_check_top(b);
+ bn_words = BN_get_flags(b, BN_FLG_CONSTTIME) ? b->dmax : b->top;
+
if (a == b)
return a;
- if (bn_wexpand(a, b->top) == NULL)
+ if (bn_wexpand(a, bn_words) == NULL)
return NULL;
if (b->top > 0)
- memcpy(a->d, b->d, sizeof(b->d[0]) * b->top);
+ memcpy(a->d, b->d, sizeof(b->d[0]) * bn_words);
a->neg = b->neg;
a->top = b->top;
diff --git a/crypto/openssl/crypto/bn/bn_mpi.c b/crypto/openssl/crypto/bn/bn_mpi.c
index bdbe822415c7..0902da5d076e 100644
--- a/crypto/openssl/crypto/bn/bn_mpi.c
+++ b/crypto/openssl/crypto/bn/bn_mpi.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -45,7 +45,7 @@ BIGNUM *BN_mpi2bn(const unsigned char *d, int n, BIGNUM *ain)
int neg = 0;
BIGNUM *a = NULL;
- if (n < 4) {
+ if (n < 4 || (d[0] & 0x80) != 0) {
BNerr(BN_F_BN_MPI2BN, BN_R_INVALID_LENGTH);
return NULL;
}
diff --git a/crypto/openssl/crypto/cmac/cmac.c b/crypto/openssl/crypto/cmac/cmac.c
index 6989c32d0660..1fac53101687 100644
--- a/crypto/openssl/crypto/cmac/cmac.c
+++ b/crypto/openssl/crypto/cmac/cmac.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2010-2018 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2010-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -116,11 +116,18 @@ int CMAC_Init(CMAC_CTX *ctx, const void *key, size_t keylen,
return 1;
}
/* Initialise context */
- if (cipher && !EVP_EncryptInit_ex(ctx->cctx, cipher, impl, NULL, NULL))
- return 0;
+ if (cipher != NULL) {
+ /* Ensure we can't use this ctx until we also have a key */
+ ctx->nlast_block = -1;
+ if (!EVP_EncryptInit_ex(ctx->cctx, cipher, impl, NULL, NULL))
+ return 0;
+ }
/* Non-NULL key means initialisation complete */
- if (key) {
+ if (key != NULL) {
int bl;
+
+ /* If anything fails then ensure we can't use this ctx */
+ ctx->nlast_block = -1;
if (!EVP_CIPHER_CTX_cipher(ctx->cctx))
return 0;
if (!EVP_CIPHER_CTX_set_key_length(ctx->cctx, keylen))
@@ -128,7 +135,7 @@ int CMAC_Init(CMAC_CTX *ctx, const void *key, size_t keylen,
if (!EVP_EncryptInit_ex(ctx->cctx, NULL, NULL, key, zero_iv))
return 0;
bl = EVP_CIPHER_CTX_block_size(ctx->cctx);
- if (!EVP_Cipher(ctx->cctx, ctx->tbl, zero_iv, bl))
+ if (EVP_Cipher(ctx->cctx, ctx->tbl, zero_iv, bl) <= 0)
return 0;
make_kn(ctx->k1, ctx->tbl, bl);
make_kn(ctx->k2, ctx->k1, bl);
@@ -166,12 +173,12 @@ int CMAC_Update(CMAC_CTX *ctx, const void *in, size_t dlen)
return 1;
data += nleft;
/* Else not final block so encrypt it */
- if (!EVP_Cipher(ctx->cctx, ctx->tbl, ctx->last_block, bl))
+ if (EVP_Cipher(ctx->cctx, ctx->tbl, ctx->last_block, bl) <= 0)
return 0;
}
/* Encrypt all but one of the complete blocks left */
while (dlen > bl) {
- if (!EVP_Cipher(ctx->cctx, ctx->tbl, data, bl))
+ if (EVP_Cipher(ctx->cctx, ctx->tbl, data, bl) <= 0)
return 0;
dlen -= bl;
data += bl;
diff --git a/crypto/openssl/crypto/cms/cms_lib.c b/crypto/openssl/crypto/cms/cms_lib.c
index 57afba436115..be4c2c703f1a 100644
--- a/crypto/openssl/crypto/cms/cms_lib.c
+++ b/crypto/openssl/crypto/cms/cms_lib.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2008-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -92,12 +92,13 @@ BIO *CMS_dataInit(CMS_ContentInfo *cms, BIO *icont)
default:
CMSerr(CMS_F_CMS_DATAINIT, CMS_R_UNSUPPORTED_TYPE);
- return NULL;
+ goto err;
}
if (cmsbio)
return BIO_push(cmsbio, cont);
+err:
if (!icont)
BIO_free(cont);
return NULL;
diff --git a/crypto/openssl/crypto/cms/cms_sd.c b/crypto/openssl/crypto/cms/cms_sd.c
index 29ba4c1b1334..3f2a782565a8 100644
--- a/crypto/openssl/crypto/cms/cms_sd.c
+++ b/crypto/openssl/crypto/cms/cms_sd.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2008-2019 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2008-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -897,8 +897,10 @@ int CMS_add_simple_smimecap(STACK_OF(X509_ALGOR) **algs,
ASN1_INTEGER *key = NULL;
if (keysize > 0) {
key = ASN1_INTEGER_new();
- if (key == NULL || !ASN1_INTEGER_set(key, keysize))
+ if (key == NULL || !ASN1_INTEGER_set(key, keysize)) {
+ ASN1_INTEGER_free(key);
return 0;
+ }
}
alg = X509_ALGOR_new();
if (alg == NULL) {
diff --git a/crypto/openssl/crypto/conf/conf_def.c b/crypto/openssl/crypto/conf/conf_def.c
index ca76fa3679b8..3d710f12ae07 100644
--- a/crypto/openssl/crypto/conf/conf_def.c
+++ b/crypto/openssl/crypto/conf/conf_def.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -376,11 +376,13 @@ static int def_load_bio(CONF *conf, BIO *in, long *line)
if (biosk == NULL) {
if ((biosk = sk_BIO_new_null()) == NULL) {
CONFerr(CONF_F_DEF_LOAD_BIO, ERR_R_MALLOC_FAILURE);
+ BIO_free(next);
goto err;
}
}
if (!sk_BIO_push(biosk, in)) {
CONFerr(CONF_F_DEF_LOAD_BIO, ERR_R_MALLOC_FAILURE);
+ BIO_free(next);
goto err;
}
/* continue with reading from the included BIO */
diff --git a/crypto/openssl/crypto/ec/asm/ecp_nistz256-armv4.pl b/crypto/openssl/crypto/ec/asm/ecp_nistz256-armv4.pl
index ea538c0698d5..fa833ce6aaf3 100755
--- a/crypto/openssl/crypto/ec/asm/ecp_nistz256-armv4.pl
+++ b/crypto/openssl/crypto/ec/asm/ecp_nistz256-armv4.pl
@@ -1517,9 +1517,9 @@ ecp_nistz256_point_add:
ldr $t2,[sp,#32*18+12] @ ~is_equal(S1,S2)
mvn $t0,$t0 @ -1/0 -> 0/-1
mvn $t1,$t1 @ -1/0 -> 0/-1
- orr $a0,$t0
- orr $a0,$t1
- orrs $a0,$t2 @ set flags
+ orr $a0,$a0,$t0
+ orr $a0,$a0,$t1
+ orrs $a0,$a0,$t2 @ set flags
@ if(~is_equal(U1,U2) | in1infty | in2infty | ~is_equal(S1,S2))
bne .Ladd_proceed
diff --git a/crypto/openssl/crypto/ec/asm/ecp_nistz256-avx2.pl b/crypto/openssl/crypto/ec/asm/ecp_nistz256-avx2.pl
deleted file mode 100755
index 1b7ec8464b4f..000000000000
--- a/crypto/openssl/crypto/ec/asm/ecp_nistz256-avx2.pl
+++ /dev/null
@@ -1,2080 +0,0 @@
-#! /usr/bin/env perl
-# Copyright 2014-2020 The OpenSSL Project Authors. All Rights Reserved.
-# Copyright (c) 2014, Intel Corporation. All Rights Reserved.
-#
-# Licensed under the OpenSSL license (the "License"). You may not use
-# this file except in compliance with the License. You can obtain a copy
-# in the file LICENSE in the source distribution or at
-# https://www.openssl.org/source/license.html
-#
-# Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1)
-# (1) Intel Corporation, Israel Development Center, Haifa, Israel
-# (2) University of Haifa, Israel
-#
-# Reference:
-# S.Gueron and V.Krasnov, "Fast Prime Field Elliptic Curve Cryptography with
-# 256 Bit Primes"
-
-$flavour = shift;
-$output = shift;
-if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
-
-$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
-
-$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
-( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
-( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
-die "can't locate x86_64-xlate.pl";
-
-open OUT,"| \"$^X\" $xlate $flavour $output";
-*STDOUT=*OUT;
-
-if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
- =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
- $avx = ($1>=2.19) + ($1>=2.22);
- $addx = ($1>=2.23);
-}
-
-if (!$addx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
- `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/) {
- $avx = ($1>=2.09) + ($1>=2.10);
- $addx = ($1>=2.10);
-}
-
-if (!$addx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
- `ml64 2>&1` =~ /Version ([0-9]+)\./) {
- $avx = ($1>=10) + ($1>=11);
- $addx = ($1>=12);
-}
-
-if (!$addx && `$ENV{CC} -v 2>&1` =~ /((?:clang|LLVM) version|based on LLVM) ([0-9]+)\.([0-9]+)/) {
- my $ver = $2 + $3/100.0; # 3.1->3.01, 3.10->3.10
- $avx = ($ver>=3.0) + ($ver>=3.01);
- $addx = ($ver>=3.03);
-}
-
-if ($avx>=2) {{
-$digit_size = "\$29";
-$n_digits = "\$9";
-
-$code.=<<___;
-.text
-
-.align 64
-.LAVX2_AND_MASK:
-.LAVX2_POLY:
-.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
-.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
-.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
-.quad 0x000001ff, 0x000001ff, 0x000001ff, 0x000001ff
-.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
-.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
-.quad 0x00040000, 0x00040000, 0x00040000, 0x00040000
-.quad 0x1fe00000, 0x1fe00000, 0x1fe00000, 0x1fe00000
-.quad 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff
-
-.LAVX2_POLY_x2:
-.quad 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC
-.quad 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC
-.quad 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC
-.quad 0x400007FC, 0x400007FC, 0x400007FC, 0x400007FC
-.quad 0x3FFFFFFE, 0x3FFFFFFE, 0x3FFFFFFE, 0x3FFFFFFE
-.quad 0x3FFFFFFE, 0x3FFFFFFE, 0x3FFFFFFE, 0x3FFFFFFE
-.quad 0x400FFFFE, 0x400FFFFE, 0x400FFFFE, 0x400FFFFE
-.quad 0x7F7FFFFE, 0x7F7FFFFE, 0x7F7FFFFE, 0x7F7FFFFE
-.quad 0x03FFFFFC, 0x03FFFFFC, 0x03FFFFFC, 0x03FFFFFC
-
-.LAVX2_POLY_x8:
-.quad 0xFFFFFFF8, 0xFFFFFFF8, 0xFFFFFFF8, 0xFFFFFFF8
-.quad 0xFFFFFFF8, 0xFFFFFFF8, 0xFFFFFFF8, 0xFFFFFFF8
-.quad 0xFFFFFFF8, 0xFFFFFFF8, 0xFFFFFFF8, 0xFFFFFFF8
-.quad 0x80000FF8, 0x80000FF8, 0x80000FF8, 0x80000FF8
-.quad 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC
-.quad 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC
-.quad 0x801FFFFC, 0x801FFFFC, 0x801FFFFC, 0x801FFFFC
-.quad 0xFEFFFFFC, 0xFEFFFFFC, 0xFEFFFFFC, 0xFEFFFFFC
-.quad 0x07FFFFF8, 0x07FFFFF8, 0x07FFFFF8, 0x07FFFFF8
-
-.LONE:
-.quad 0x00000020, 0x00000020, 0x00000020, 0x00000020
-.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
-.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
-.quad 0x1fffc000, 0x1fffc000, 0x1fffc000, 0x1fffc000
-.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
-.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
-.quad 0x1f7fffff, 0x1f7fffff, 0x1f7fffff, 0x1f7fffff
-.quad 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x03ffffff
-.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
-
-# RR = 2^266 mod p in AVX2 format, to transform from the native OpenSSL
-# Montgomery form (*2^256) to our format (*2^261)
-
-.LTO_MONT_AVX2:
-.quad 0x00000400, 0x00000400, 0x00000400, 0x00000400
-.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
-.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
-.quad 0x1ff80000, 0x1ff80000, 0x1ff80000, 0x1ff80000
-.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
-.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
-.quad 0x0fffffff, 0x0fffffff, 0x0fffffff, 0x0fffffff
-.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
-.quad 0x00000003, 0x00000003, 0x00000003, 0x00000003
-
-.LFROM_MONT_AVX2:
-.quad 0x00000001, 0x00000001, 0x00000001, 0x00000001
-.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
-.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
-.quad 0x1ffffe00, 0x1ffffe00, 0x1ffffe00, 0x1ffffe00
-.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
-.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
-.quad 0x1ffbffff, 0x1ffbffff, 0x1ffbffff, 0x1ffbffff
-.quad 0x001fffff, 0x001fffff, 0x001fffff, 0x001fffff
-.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
-
-.LIntOne:
-.long 1,1,1,1,1,1,1,1
-___
-
-{
-# This function receives a pointer to an array of four affine points
-# (X, Y, <1>) and rearranges the data for AVX2 execution, while
-# converting it to 2^29 radix redundant form
-
-my ($X0,$X1,$X2,$X3, $Y0,$Y1,$Y2,$Y3,
- $T0,$T1,$T2,$T3, $T4,$T5,$T6,$T7)=map("%ymm$_",(0..15));
-
-$code.=<<___;
-.globl ecp_nistz256_avx2_transpose_convert
-.type ecp_nistz256_avx2_transpose_convert,\@function,2
-.align 64
-ecp_nistz256_avx2_transpose_convert:
- vzeroupper
-___
-$code.=<<___ if ($win64);
- lea -8-16*10(%rsp), %rsp
- vmovaps %xmm6, -8-16*10(%rax)
- vmovaps %xmm7, -8-16*9(%rax)
- vmovaps %xmm8, -8-16*8(%rax)
- vmovaps %xmm9, -8-16*7(%rax)
- vmovaps %xmm10, -8-16*6(%rax)
- vmovaps %xmm11, -8-16*5(%rax)
- vmovaps %xmm12, -8-16*4(%rax)
- vmovaps %xmm13, -8-16*3(%rax)
- vmovaps %xmm14, -8-16*2(%rax)
- vmovaps %xmm15, -8-16*1(%rax)
-___
-$code.=<<___;
- # Load the data
- vmovdqa 32*0(%rsi), $X0
- lea 112(%rsi), %rax # size optimization
- vmovdqa 32*1(%rsi), $Y0
- lea .LAVX2_AND_MASK(%rip), %rdx
- vmovdqa 32*2(%rsi), $X1
- vmovdqa 32*3(%rsi), $Y1
- vmovdqa 32*4-112(%rax), $X2
- vmovdqa 32*5-112(%rax), $Y2
- vmovdqa 32*6-112(%rax), $X3
- vmovdqa 32*7-112(%rax), $Y3
-
- # Transpose X and Y independently
- vpunpcklqdq $X1, $X0, $T0 # T0 = [B2 A2 B0 A0]
- vpunpcklqdq $X3, $X2, $T1 # T1 = [D2 C2 D0 C0]
- vpunpckhqdq $X1, $X0, $T2 # T2 = [B3 A3 B1 A1]
- vpunpckhqdq $X3, $X2, $T3 # T3 = [D3 C3 D1 C1]
-
- vpunpcklqdq $Y1, $Y0, $T4
- vpunpcklqdq $Y3, $Y2, $T5
- vpunpckhqdq $Y1, $Y0, $T6
- vpunpckhqdq $Y3, $Y2, $T7
-
- vperm2i128 \$0x20, $T1, $T0, $X0 # X0 = [D0 C0 B0 A0]
- vperm2i128 \$0x20, $T3, $T2, $X1 # X1 = [D1 C1 B1 A1]
- vperm2i128 \$0x31, $T1, $T0, $X2 # X2 = [D2 C2 B2 A2]
- vperm2i128 \$0x31, $T3, $T2, $X3 # X3 = [D3 C3 B3 A3]
-
- vperm2i128 \$0x20, $T5, $T4, $Y0
- vperm2i128 \$0x20, $T7, $T6, $Y1
- vperm2i128 \$0x31, $T5, $T4, $Y2
- vperm2i128 \$0x31, $T7, $T6, $Y3
- vmovdqa (%rdx), $T7
-
- vpand (%rdx), $X0, $T0 # out[0] = in[0] & mask;
- vpsrlq \$29, $X0, $X0
- vpand $T7, $X0, $T1 # out[1] = (in[0] >> shift) & mask;
- vpsrlq \$29, $X0, $X0
- vpsllq \$6, $X1, $T2
- vpxor $X0, $T2, $T2
- vpand $T7, $T2, $T2 # out[2] = ((in[0] >> (shift*2)) ^ (in[1] << (64-shift*2))) & mask;
- vpsrlq \$23, $X1, $X1
- vpand $T7, $X1, $T3 # out[3] = (in[1] >> ((shift*3)%64)) & mask;
- vpsrlq \$29, $X1, $X1
- vpsllq \$12, $X2, $T4
- vpxor $X1, $T4, $T4
- vpand $T7, $T4, $T4 # out[4] = ((in[1] >> ((shift*4)%64)) ^ (in[2] << (64*2-shift*4))) & mask;
- vpsrlq \$17, $X2, $X2
- vpand $T7, $X2, $T5 # out[5] = (in[2] >> ((shift*5)%64)) & mask;
- vpsrlq \$29, $X2, $X2
- vpsllq \$18, $X3, $T6
- vpxor $X2, $T6, $T6
- vpand $T7, $T6, $T6 # out[6] = ((in[2] >> ((shift*6)%64)) ^ (in[3] << (64*3-shift*6))) & mask;
- vpsrlq \$11, $X3, $X3
- vmovdqa $T0, 32*0(%rdi)
- lea 112(%rdi), %rax # size optimization
- vpand $T7, $X3, $T0 # out[7] = (in[3] >> ((shift*7)%64)) & mask;
- vpsrlq \$29, $X3, $X3 # out[8] = (in[3] >> ((shift*8)%64)) & mask;
-
- vmovdqa $T1, 32*1(%rdi)
- vmovdqa $T2, 32*2(%rdi)
- vmovdqa $T3, 32*3(%rdi)
- vmovdqa $T4, 32*4-112(%rax)
- vmovdqa $T5, 32*5-112(%rax)
- vmovdqa $T6, 32*6-112(%rax)
- vmovdqa $T0, 32*7-112(%rax)
- vmovdqa $X3, 32*8-112(%rax)
- lea 448(%rdi), %rax # size optimization
-
- vpand $T7, $Y0, $T0 # out[0] = in[0] & mask;
- vpsrlq \$29, $Y0, $Y0
- vpand $T7, $Y0, $T1 # out[1] = (in[0] >> shift) & mask;
- vpsrlq \$29, $Y0, $Y0
- vpsllq \$6, $Y1, $T2
- vpxor $Y0, $T2, $T2
- vpand $T7, $T2, $T2 # out[2] = ((in[0] >> (shift*2)) ^ (in[1] << (64-shift*2))) & mask;
- vpsrlq \$23, $Y1, $Y1
- vpand $T7, $Y1, $T3 # out[3] = (in[1] >> ((shift*3)%64)) & mask;
- vpsrlq \$29, $Y1, $Y1
- vpsllq \$12, $Y2, $T4
- vpxor $Y1, $T4, $T4
- vpand $T7, $T4, $T4 # out[4] = ((in[1] >> ((shift*4)%64)) ^ (in[2] << (64*2-shift*4))) & mask;
- vpsrlq \$17, $Y2, $Y2
- vpand $T7, $Y2, $T5 # out[5] = (in[2] >> ((shift*5)%64)) & mask;
- vpsrlq \$29, $Y2, $Y2
- vpsllq \$18, $Y3, $T6
- vpxor $Y2, $T6, $T6
- vpand $T7, $T6, $T6 # out[6] = ((in[2] >> ((shift*6)%64)) ^ (in[3] << (64*3-shift*6))) & mask;
- vpsrlq \$11, $Y3, $Y3
- vmovdqa $T0, 32*9-448(%rax)
- vpand $T7, $Y3, $T0 # out[7] = (in[3] >> ((shift*7)%64)) & mask;
- vpsrlq \$29, $Y3, $Y3 # out[8] = (in[3] >> ((shift*8)%64)) & mask;
-
- vmovdqa $T1, 32*10-448(%rax)
- vmovdqa $T2, 32*11-448(%rax)
- vmovdqa $T3, 32*12-448(%rax)
- vmovdqa $T4, 32*13-448(%rax)
- vmovdqa $T5, 32*14-448(%rax)
- vmovdqa $T6, 32*15-448(%rax)
- vmovdqa $T0, 32*16-448(%rax)
- vmovdqa $Y3, 32*17-448(%rax)
-
- vzeroupper
-___
-$code.=<<___ if ($win64);
- movaps 16*0(%rsp), %xmm6
- movaps 16*1(%rsp), %xmm7
- movaps 16*2(%rsp), %xmm8
- movaps 16*3(%rsp), %xmm9
- movaps 16*4(%rsp), %xmm10
- movaps 16*5(%rsp), %xmm11
- movaps 16*6(%rsp), %xmm12
- movaps 16*7(%rsp), %xmm13
- movaps 16*8(%rsp), %xmm14
- movaps 16*9(%rsp), %xmm15
- lea 8+16*10(%rsp), %rsp
-___
-$code.=<<___;
- ret
-.size ecp_nistz256_avx2_transpose_convert,.-ecp_nistz256_avx2_transpose_convert
-___
-}
-{
-################################################################################
-# This function receives a pointer to an array of four AVX2 formatted points
-# (X, Y, Z) convert the data to normal representation, and rearranges the data
-
-my ($D0,$D1,$D2,$D3, $D4,$D5,$D6,$D7, $D8)=map("%ymm$_",(0..8));
-my ($T0,$T1,$T2,$T3, $T4,$T5,$T6)=map("%ymm$_",(9..15));
-
-$code.=<<___;
-
-.globl ecp_nistz256_avx2_convert_transpose_back
-.type ecp_nistz256_avx2_convert_transpose_back,\@function,2
-.align 32
-ecp_nistz256_avx2_convert_transpose_back:
- vzeroupper
-___
-$code.=<<___ if ($win64);
- lea -8-16*10(%rsp), %rsp
- vmovaps %xmm6, -8-16*10(%rax)
- vmovaps %xmm7, -8-16*9(%rax)
- vmovaps %xmm8, -8-16*8(%rax)
- vmovaps %xmm9, -8-16*7(%rax)
- vmovaps %xmm10, -8-16*6(%rax)
- vmovaps %xmm11, -8-16*5(%rax)
- vmovaps %xmm12, -8-16*4(%rax)
- vmovaps %xmm13, -8-16*3(%rax)
- vmovaps %xmm14, -8-16*2(%rax)
- vmovaps %xmm15, -8-16*1(%rax)
-___
-$code.=<<___;
- mov \$3, %ecx
-
-.Lconv_loop:
- vmovdqa 32*0(%rsi), $D0
- lea 160(%rsi), %rax # size optimization
- vmovdqa 32*1(%rsi), $D1
- vmovdqa 32*2(%rsi), $D2
- vmovdqa 32*3(%rsi), $D3
- vmovdqa 32*4-160(%rax), $D4
- vmovdqa 32*5-160(%rax), $D5
- vmovdqa 32*6-160(%rax), $D6
- vmovdqa 32*7-160(%rax), $D7
- vmovdqa 32*8-160(%rax), $D8
-
- vpsllq \$29, $D1, $D1
- vpsllq \$58, $D2, $T0
- vpaddq $D1, $D0, $D0
- vpaddq $T0, $D0, $D0 # out[0] = (in[0]) ^ (in[1] << shift*1) ^ (in[2] << shift*2);
-
- vpsrlq \$6, $D2, $D2
- vpsllq \$23, $D3, $D3
- vpsllq \$52, $D4, $T1
- vpaddq $D2, $D3, $D3
- vpaddq $D3, $T1, $D1 # out[1] = (in[2] >> (64*1-shift*2)) ^ (in[3] << shift*3%64) ^ (in[4] << shift*4%64);
-
- vpsrlq \$12, $D4, $D4
- vpsllq \$17, $D5, $D5
- vpsllq \$46, $D6, $T2
- vpaddq $D4, $D5, $D5
- vpaddq $D5, $T2, $D2 # out[2] = (in[4] >> (64*2-shift*4)) ^ (in[5] << shift*5%64) ^ (in[6] << shift*6%64);
-
- vpsrlq \$18, $D6, $D6
- vpsllq \$11, $D7, $D7
- vpsllq \$40, $D8, $T3
- vpaddq $D6, $D7, $D7
- vpaddq $D7, $T3, $D3 # out[3] = (in[6] >> (64*3-shift*6)) ^ (in[7] << shift*7%64) ^ (in[8] << shift*8%64);
-
- vpunpcklqdq $D1, $D0, $T0 # T0 = [B2 A2 B0 A0]
- vpunpcklqdq $D3, $D2, $T1 # T1 = [D2 C2 D0 C0]
- vpunpckhqdq $D1, $D0, $T2 # T2 = [B3 A3 B1 A1]
- vpunpckhqdq $D3, $D2, $T3 # T3 = [D3 C3 D1 C1]
-
- vperm2i128 \$0x20, $T1, $T0, $D0 # X0 = [D0 C0 B0 A0]
- vperm2i128 \$0x20, $T3, $T2, $D1 # X1 = [D1 C1 B1 A1]
- vperm2i128 \$0x31, $T1, $T0, $D2 # X2 = [D2 C2 B2 A2]
- vperm2i128 \$0x31, $T3, $T2, $D3 # X3 = [D3 C3 B3 A3]
-
- vmovdqa $D0, 32*0(%rdi)
- vmovdqa $D1, 32*3(%rdi)
- vmovdqa $D2, 32*6(%rdi)
- vmovdqa $D3, 32*9(%rdi)
-
- lea 32*9(%rsi), %rsi
- lea 32*1(%rdi), %rdi
-
- dec %ecx
- jnz .Lconv_loop
-
- vzeroupper
-___
-$code.=<<___ if ($win64);
- movaps 16*0(%rsp), %xmm6
- movaps 16*1(%rsp), %xmm7
- movaps 16*2(%rsp), %xmm8
- movaps 16*3(%rsp), %xmm9
- movaps 16*4(%rsp), %xmm10
- movaps 16*5(%rsp), %xmm11
- movaps 16*6(%rsp), %xmm12
- movaps 16*7(%rsp), %xmm13
- movaps 16*8(%rsp), %xmm14
- movaps 16*9(%rsp), %xmm15
- lea 8+16*10(%rsp), %rsp
-___
-$code.=<<___;
- ret
-.size ecp_nistz256_avx2_convert_transpose_back,.-ecp_nistz256_avx2_convert_transpose_back
-___
-}
-{
-my ($r_ptr,$a_ptr,$b_ptr,$itr)=("%rdi","%rsi","%rdx","%ecx");
-my ($ACC0,$ACC1,$ACC2,$ACC3,$ACC4,$ACC5,$ACC6,$ACC7,$ACC8)=map("%ymm$_",(0..8));
-my ($B,$Y,$T0,$AND_MASK,$OVERFLOW)=map("%ymm$_",(9..13));
-
-sub NORMALIZE {
-my $ret=<<___;
- vpsrlq $digit_size, $ACC0, $T0
- vpand $AND_MASK, $ACC0, $ACC0
- vpaddq $T0, $ACC1, $ACC1
-
- vpsrlq $digit_size, $ACC1, $T0
- vpand $AND_MASK, $ACC1, $ACC1
- vpaddq $T0, $ACC2, $ACC2
-
- vpsrlq $digit_size, $ACC2, $T0
- vpand $AND_MASK, $ACC2, $ACC2
- vpaddq $T0, $ACC3, $ACC3
-
- vpsrlq $digit_size, $ACC3, $T0
- vpand $AND_MASK, $ACC3, $ACC3
- vpaddq $T0, $ACC4, $ACC4
-
- vpsrlq $digit_size, $ACC4, $T0
- vpand $AND_MASK, $ACC4, $ACC4
- vpaddq $T0, $ACC5, $ACC5
-
- vpsrlq $digit_size, $ACC5, $T0
- vpand $AND_MASK, $ACC5, $ACC5
- vpaddq $T0, $ACC6, $ACC6
-
- vpsrlq $digit_size, $ACC6, $T0
- vpand $AND_MASK, $ACC6, $ACC6
- vpaddq $T0, $ACC7, $ACC7
-
- vpsrlq $digit_size, $ACC7, $T0
- vpand $AND_MASK, $ACC7, $ACC7
- vpaddq $T0, $ACC8, $ACC8
- #vpand $AND_MASK, $ACC8, $ACC8
-___
- $ret;
-}
-
-sub STORE {
-my $ret=<<___;
- vmovdqa $ACC0, 32*0(%rdi)
- lea 160(%rdi), %rax # size optimization
- vmovdqa $ACC1, 32*1(%rdi)
- vmovdqa $ACC2, 32*2(%rdi)
- vmovdqa $ACC3, 32*3(%rdi)
- vmovdqa $ACC4, 32*4-160(%rax)
- vmovdqa $ACC5, 32*5-160(%rax)
- vmovdqa $ACC6, 32*6-160(%rax)
- vmovdqa $ACC7, 32*7-160(%rax)
- vmovdqa $ACC8, 32*8-160(%rax)
-___
- $ret;
-}
-
-$code.=<<___;
-.type avx2_normalize,\@abi-omnipotent
-.align 32
-avx2_normalize:
- vpsrlq $digit_size, $ACC0, $T0
- vpand $AND_MASK, $ACC0, $ACC0
- vpaddq $T0, $ACC1, $ACC1
-
- vpsrlq $digit_size, $ACC1, $T0
- vpand $AND_MASK, $ACC1, $ACC1
- vpaddq $T0, $ACC2, $ACC2
-
- vpsrlq $digit_size, $ACC2, $T0
- vpand $AND_MASK, $ACC2, $ACC2
- vpaddq $T0, $ACC3, $ACC3
-
- vpsrlq $digit_size, $ACC3, $T0
- vpand $AND_MASK, $ACC3, $ACC3
- vpaddq $T0, $ACC4, $ACC4
-
- vpsrlq $digit_size, $ACC4, $T0
- vpand $AND_MASK, $ACC4, $ACC4
- vpaddq $T0, $ACC5, $ACC5
-
- vpsrlq $digit_size, $ACC5, $T0
- vpand $AND_MASK, $ACC5, $ACC5
- vpaddq $T0, $ACC6, $ACC6
-
- vpsrlq $digit_size, $ACC6, $T0
- vpand $AND_MASK, $ACC6, $ACC6
- vpaddq $T0, $ACC7, $ACC7
-
- vpsrlq $digit_size, $ACC7, $T0
- vpand $AND_MASK, $ACC7, $ACC7
- vpaddq $T0, $ACC8, $ACC8
- #vpand $AND_MASK, $ACC8, $ACC8
-
- ret
-.size avx2_normalize,.-avx2_normalize
-
-.type avx2_normalize_n_store,\@abi-omnipotent
-.align 32
-avx2_normalize_n_store:
- vpsrlq $digit_size, $ACC0, $T0
- vpand $AND_MASK, $ACC0, $ACC0
- vpaddq $T0, $ACC1, $ACC1
-
- vpsrlq $digit_size, $ACC1, $T0
- vpand $AND_MASK, $ACC1, $ACC1
- vmovdqa $ACC0, 32*0(%rdi)
- lea 160(%rdi), %rax # size optimization
- vpaddq $T0, $ACC2, $ACC2
-
- vpsrlq $digit_size, $ACC2, $T0
- vpand $AND_MASK, $ACC2, $ACC2
- vmovdqa $ACC1, 32*1(%rdi)
- vpaddq $T0, $ACC3, $ACC3
-
- vpsrlq $digit_size, $ACC3, $T0
- vpand $AND_MASK, $ACC3, $ACC3
- vmovdqa $ACC2, 32*2(%rdi)
- vpaddq $T0, $ACC4, $ACC4
-
- vpsrlq $digit_size, $ACC4, $T0
- vpand $AND_MASK, $ACC4, $ACC4
- vmovdqa $ACC3, 32*3(%rdi)
- vpaddq $T0, $ACC5, $ACC5
-
- vpsrlq $digit_size, $ACC5, $T0
- vpand $AND_MASK, $ACC5, $ACC5
- vmovdqa $ACC4, 32*4-160(%rax)
- vpaddq $T0, $ACC6, $ACC6
-
- vpsrlq $digit_size, $ACC6, $T0
- vpand $AND_MASK, $ACC6, $ACC6
- vmovdqa $ACC5, 32*5-160(%rax)
- vpaddq $T0, $ACC7, $ACC7
-
- vpsrlq $digit_size, $ACC7, $T0
- vpand $AND_MASK, $ACC7, $ACC7
- vmovdqa $ACC6, 32*6-160(%rax)
- vpaddq $T0, $ACC8, $ACC8
- #vpand $AND_MASK, $ACC8, $ACC8
- vmovdqa $ACC7, 32*7-160(%rax)
- vmovdqa $ACC8, 32*8-160(%rax)
-
- ret
-.size avx2_normalize_n_store,.-avx2_normalize_n_store
-
-################################################################################
-# void avx2_mul_x4(void* RESULTx4, void *Ax4, void *Bx4);
-.type avx2_mul_x4,\@abi-omnipotent
-.align 32
-avx2_mul_x4:
- lea .LAVX2_POLY(%rip), %rax
-
- vpxor $ACC0, $ACC0, $ACC0
- vpxor $ACC1, $ACC1, $ACC1
- vpxor $ACC2, $ACC2, $ACC2
- vpxor $ACC3, $ACC3, $ACC3
- vpxor $ACC4, $ACC4, $ACC4
- vpxor $ACC5, $ACC5, $ACC5
- vpxor $ACC6, $ACC6, $ACC6
- vpxor $ACC7, $ACC7, $ACC7
-
- vmovdqa 32*7(%rax), %ymm14
- vmovdqa 32*8(%rax), %ymm15
-
- mov $n_digits, $itr
- lea -512($a_ptr), $a_ptr # strategic bias to control u-op density
- jmp .Lavx2_mul_x4_loop
-
-.align 32
-.Lavx2_mul_x4_loop:
- vmovdqa 32*0($b_ptr), $B
- lea 32*1($b_ptr), $b_ptr
-
- vpmuludq 32*0+512($a_ptr), $B, $T0
- vpmuludq 32*1+512($a_ptr), $B, $OVERFLOW # borrow $OVERFLOW
- vpaddq $T0, $ACC0, $ACC0
- vpmuludq 32*2+512($a_ptr), $B, $T0
- vpaddq $OVERFLOW, $ACC1, $ACC1
- vpand $AND_MASK, $ACC0, $Y
- vpmuludq 32*3+512($a_ptr), $B, $OVERFLOW
- vpaddq $T0, $ACC2, $ACC2
- vpmuludq 32*4+512($a_ptr), $B, $T0
- vpaddq $OVERFLOW, $ACC3, $ACC3
- vpmuludq 32*5+512($a_ptr), $B, $OVERFLOW
- vpaddq $T0, $ACC4, $ACC4
- vpmuludq 32*6+512($a_ptr), $B, $T0
- vpaddq $OVERFLOW, $ACC5, $ACC5
- vpmuludq 32*7+512($a_ptr), $B, $OVERFLOW
- vpaddq $T0, $ACC6, $ACC6
-
- # Skip some multiplications, optimizing for the constant poly
- vpmuludq $AND_MASK, $Y, $T0
- vpaddq $OVERFLOW, $ACC7, $ACC7
- vpmuludq 32*8+512($a_ptr), $B, $ACC8
- vpaddq $T0, $ACC0, $OVERFLOW
- vpaddq $T0, $ACC1, $ACC0
- vpsrlq $digit_size, $OVERFLOW, $OVERFLOW
- vpaddq $T0, $ACC2, $ACC1
- vpmuludq 32*3(%rax), $Y, $T0
- vpaddq $OVERFLOW, $ACC0, $ACC0
- vpaddq $T0, $ACC3, $ACC2
- .byte 0x67
- vmovdqa $ACC4, $ACC3
- vpsllq \$18, $Y, $OVERFLOW
- .byte 0x67
- vmovdqa $ACC5, $ACC4
- vpmuludq %ymm14, $Y, $T0
- vpaddq $OVERFLOW, $ACC6, $ACC5
- vpmuludq %ymm15, $Y, $OVERFLOW
- vpaddq $T0, $ACC7, $ACC6
- vpaddq $OVERFLOW, $ACC8, $ACC7
-
- dec $itr
- jnz .Lavx2_mul_x4_loop
-
- vpxor $ACC8, $ACC8, $ACC8
-
- ret
-.size avx2_mul_x4,.-avx2_mul_x4
-
-# Function optimized for the constant 1
-################################################################################
-# void avx2_mul_by1_x4(void* RESULTx4, void *Ax4);
-.type avx2_mul_by1_x4,\@abi-omnipotent
-.align 32
-avx2_mul_by1_x4:
- lea .LAVX2_POLY(%rip), %rax
-
- vpxor $ACC0, $ACC0, $ACC0
- vpxor $ACC1, $ACC1, $ACC1
- vpxor $ACC2, $ACC2, $ACC2
- vpxor $ACC3, $ACC3, $ACC3
- vpxor $ACC4, $ACC4, $ACC4
- vpxor $ACC5, $ACC5, $ACC5
- vpxor $ACC6, $ACC6, $ACC6
- vpxor $ACC7, $ACC7, $ACC7
- vpxor $ACC8, $ACC8, $ACC8
-
- vmovdqa 32*3+.LONE(%rip), %ymm14
- vmovdqa 32*7+.LONE(%rip), %ymm15
-
- mov $n_digits, $itr
- jmp .Lavx2_mul_by1_x4_loop
-
-.align 32
-.Lavx2_mul_by1_x4_loop:
- vmovdqa 32*0($a_ptr), $B
- .byte 0x48,0x8d,0xb6,0x20,0,0,0 # lea 32*1($a_ptr), $a_ptr
-
- vpsllq \$5, $B, $OVERFLOW
- vpmuludq %ymm14, $B, $T0
- vpaddq $OVERFLOW, $ACC0, $ACC0
- vpaddq $T0, $ACC3, $ACC3
- .byte 0x67
- vpmuludq $AND_MASK, $B, $T0
- vpand $AND_MASK, $ACC0, $Y
- vpaddq $T0, $ACC4, $ACC4
- vpaddq $T0, $ACC5, $ACC5
- vpaddq $T0, $ACC6, $ACC6
- vpsllq \$23, $B, $T0
-
- .byte 0x67,0x67
- vpmuludq %ymm15, $B, $OVERFLOW
- vpsubq $T0, $ACC6, $ACC6
-
- vpmuludq $AND_MASK, $Y, $T0
- vpaddq $OVERFLOW, $ACC7, $ACC7
- vpaddq $T0, $ACC0, $OVERFLOW
- vpaddq $T0, $ACC1, $ACC0
- .byte 0x67,0x67
- vpsrlq $digit_size, $OVERFLOW, $OVERFLOW
- vpaddq $T0, $ACC2, $ACC1
- vpmuludq 32*3(%rax), $Y, $T0
- vpaddq $OVERFLOW, $ACC0, $ACC0
- vpaddq $T0, $ACC3, $ACC2
- vmovdqa $ACC4, $ACC3
- vpsllq \$18, $Y, $OVERFLOW
- vmovdqa $ACC5, $ACC4
- vpmuludq 32*7(%rax), $Y, $T0
- vpaddq $OVERFLOW, $ACC6, $ACC5
- vpaddq $T0, $ACC7, $ACC6
- vpmuludq 32*8(%rax), $Y, $ACC7
-
- dec $itr
- jnz .Lavx2_mul_by1_x4_loop
-
- ret
-.size avx2_mul_by1_x4,.-avx2_mul_by1_x4
-
-################################################################################
-# void avx2_sqr_x4(void* RESULTx4, void *Ax4, void *Bx4);
-.type avx2_sqr_x4,\@abi-omnipotent
-.align 32
-avx2_sqr_x4:
- lea .LAVX2_POLY(%rip), %rax
-
- vmovdqa 32*7(%rax), %ymm14
- vmovdqa 32*8(%rax), %ymm15
-
- vmovdqa 32*0($a_ptr), $B
- vmovdqa 32*1($a_ptr), $ACC1
- vmovdqa 32*2($a_ptr), $ACC2
- vmovdqa 32*3($a_ptr), $ACC3
- vmovdqa 32*4($a_ptr), $ACC4
- vmovdqa 32*5($a_ptr), $ACC5
- vmovdqa 32*6($a_ptr), $ACC6
- vmovdqa 32*7($a_ptr), $ACC7
- vpaddq $ACC1, $ACC1, $ACC1 # 2*$ACC0..7
- vmovdqa 32*8($a_ptr), $ACC8
- vpaddq $ACC2, $ACC2, $ACC2
- vmovdqa $ACC1, 32*0(%rcx)
- vpaddq $ACC3, $ACC3, $ACC3
- vmovdqa $ACC2, 32*1(%rcx)
- vpaddq $ACC4, $ACC4, $ACC4
- vmovdqa $ACC3, 32*2(%rcx)
- vpaddq $ACC5, $ACC5, $ACC5
- vmovdqa $ACC4, 32*3(%rcx)
- vpaddq $ACC6, $ACC6, $ACC6
- vmovdqa $ACC5, 32*4(%rcx)
- vpaddq $ACC7, $ACC7, $ACC7
- vmovdqa $ACC6, 32*5(%rcx)
- vpaddq $ACC8, $ACC8, $ACC8
- vmovdqa $ACC7, 32*6(%rcx)
- vmovdqa $ACC8, 32*7(%rcx)
-
- #itr 1
- vpmuludq $B, $B, $ACC0
- vpmuludq $B, $ACC1, $ACC1
- vpand $AND_MASK, $ACC0, $Y
- vpmuludq $B, $ACC2, $ACC2
- vpmuludq $B, $ACC3, $ACC3
- vpmuludq $B, $ACC4, $ACC4
- vpmuludq $B, $ACC5, $ACC5
- vpmuludq $B, $ACC6, $ACC6
- vpmuludq $AND_MASK, $Y, $T0
- vpmuludq $B, $ACC7, $ACC7
- vpmuludq $B, $ACC8, $ACC8
- vmovdqa 32*1($a_ptr), $B
-
- vpaddq $T0, $ACC0, $OVERFLOW
- vpaddq $T0, $ACC1, $ACC0
- vpsrlq $digit_size, $OVERFLOW, $OVERFLOW
- vpaddq $T0, $ACC2, $ACC1
- vpmuludq 32*3(%rax), $Y, $T0
- vpaddq $OVERFLOW, $ACC0, $ACC0
- vpaddq $T0, $ACC3, $ACC2
- vmovdqa $ACC4, $ACC3
- vpsllq \$18, $Y, $T0
- vmovdqa $ACC5, $ACC4
- vpmuludq %ymm14, $Y, $OVERFLOW
- vpaddq $T0, $ACC6, $ACC5
- vpmuludq %ymm15, $Y, $T0
- vpaddq $OVERFLOW, $ACC7, $ACC6
- vpaddq $T0, $ACC8, $ACC7
-
- #itr 2
- vpmuludq $B, $B, $OVERFLOW
- vpand $AND_MASK, $ACC0, $Y
- vpmuludq 32*1(%rcx), $B, $T0
- vpaddq $OVERFLOW, $ACC1, $ACC1
- vpmuludq 32*2(%rcx), $B, $OVERFLOW
- vpaddq $T0, $ACC2, $ACC2
- vpmuludq 32*3(%rcx), $B, $T0
- vpaddq $OVERFLOW, $ACC3, $ACC3
- vpmuludq 32*4(%rcx), $B, $OVERFLOW
- vpaddq $T0, $ACC4, $ACC4
- vpmuludq 32*5(%rcx), $B, $T0
- vpaddq $OVERFLOW, $ACC5, $ACC5
- vpmuludq 32*6(%rcx), $B, $OVERFLOW
- vpaddq $T0, $ACC6, $ACC6
-
- vpmuludq $AND_MASK, $Y, $T0
- vpaddq $OVERFLOW, $ACC7, $ACC7
- vpmuludq 32*7(%rcx), $B, $ACC8
- vmovdqa 32*2($a_ptr), $B
- vpaddq $T0, $ACC0, $OVERFLOW
- vpaddq $T0, $ACC1, $ACC0
- vpsrlq $digit_size, $OVERFLOW, $OVERFLOW
- vpaddq $T0, $ACC2, $ACC1
- vpmuludq 32*3(%rax), $Y, $T0
- vpaddq $OVERFLOW, $ACC0, $ACC0
- vpaddq $T0, $ACC3, $ACC2
- vmovdqa $ACC4, $ACC3
- vpsllq \$18, $Y, $T0
- vmovdqa $ACC5, $ACC4
- vpmuludq %ymm14, $Y, $OVERFLOW
- vpaddq $T0, $ACC6, $ACC5
- vpmuludq %ymm15, $Y, $T0
- vpaddq $OVERFLOW, $ACC7, $ACC6
- vpaddq $T0, $ACC8, $ACC7
-
- #itr 3
- vpmuludq $B, $B, $T0
- vpand $AND_MASK, $ACC0, $Y
- vpmuludq 32*2(%rcx), $B, $OVERFLOW
- vpaddq $T0, $ACC2, $ACC2
- vpmuludq 32*3(%rcx), $B, $T0
- vpaddq $OVERFLOW, $ACC3, $ACC3
- vpmuludq 32*4(%rcx), $B, $OVERFLOW
- vpaddq $T0, $ACC4, $ACC4
- vpmuludq 32*5(%rcx), $B, $T0
- vpaddq $OVERFLOW, $ACC5, $ACC5
- vpmuludq 32*6(%rcx), $B, $OVERFLOW
- vpaddq $T0, $ACC6, $ACC6
-
- vpmuludq $AND_MASK, $Y, $T0
- vpaddq $OVERFLOW, $ACC7, $ACC7
- vpmuludq 32*7(%rcx), $B, $ACC8
- vmovdqa 32*3($a_ptr), $B
- vpaddq $T0, $ACC0, $OVERFLOW
- vpaddq $T0, $ACC1, $ACC0
- vpsrlq $digit_size, $OVERFLOW, $OVERFLOW
- vpaddq $T0, $ACC2, $ACC1
- vpmuludq 32*3(%rax), $Y, $T0
- vpaddq $OVERFLOW, $ACC0, $ACC0
- vpaddq $T0, $ACC3, $ACC2
- vmovdqa $ACC4, $ACC3
- vpsllq \$18, $Y, $T0
- vmovdqa $ACC5, $ACC4
- vpmuludq %ymm14, $Y, $OVERFLOW
- vpaddq $T0, $ACC6, $ACC5
- vpmuludq %ymm15, $Y, $T0
- vpand $AND_MASK, $ACC0, $Y
- vpaddq $OVERFLOW, $ACC7, $ACC6
- vpaddq $T0, $ACC8, $ACC7
-
- #itr 4
- vpmuludq $B, $B, $OVERFLOW
- vpmuludq 32*3(%rcx), $B, $T0
- vpaddq $OVERFLOW, $ACC3, $ACC3
- vpmuludq 32*4(%rcx), $B, $OVERFLOW
- vpaddq $T0, $ACC4, $ACC4
- vpmuludq 32*5(%rcx), $B, $T0
- vpaddq $OVERFLOW, $ACC5, $ACC5
- vpmuludq 32*6(%rcx), $B, $OVERFLOW
- vpaddq $T0, $ACC6, $ACC6
-
- vpmuludq $AND_MASK, $Y, $T0
- vpaddq $OVERFLOW, $ACC7, $ACC7
- vpmuludq 32*7(%rcx), $B, $ACC8
- vmovdqa 32*4($a_ptr), $B
- vpaddq $T0, $ACC0, $OVERFLOW
- vpaddq $T0, $ACC1, $ACC0
- vpsrlq $digit_size, $OVERFLOW, $OVERFLOW
- vpaddq $T0, $ACC2, $ACC1
- vpmuludq 32*3(%rax), $Y, $T0
- vpaddq $OVERFLOW, $ACC0, $ACC0
- vpaddq $T0, $ACC3, $ACC2
- vmovdqa $ACC4, $ACC3
- vpsllq \$18, $Y, $T0
- vmovdqa $ACC5, $ACC4
- vpmuludq %ymm14, $Y, $OVERFLOW
- vpaddq $T0, $ACC6, $ACC5
- vpmuludq %ymm15, $Y, $T0
- vpand $AND_MASK, $ACC0, $Y
- vpaddq $OVERFLOW, $ACC7, $ACC6
- vpaddq $T0, $ACC8, $ACC7
-
- #itr 5
- vpmuludq $B, $B, $T0
- vpmuludq 32*4(%rcx), $B, $OVERFLOW
- vpaddq $T0, $ACC4, $ACC4
- vpmuludq 32*5(%rcx), $B, $T0
- vpaddq $OVERFLOW, $ACC5, $ACC5
- vpmuludq 32*6(%rcx), $B, $OVERFLOW
- vpaddq $T0, $ACC6, $ACC6
-
- vpmuludq $AND_MASK, $Y, $T0
- vpaddq $OVERFLOW, $ACC7, $ACC7
- vpmuludq 32*7(%rcx), $B, $ACC8
- vmovdqa 32*5($a_ptr), $B
- vpaddq $T0, $ACC0, $OVERFLOW
- vpsrlq $digit_size, $OVERFLOW, $OVERFLOW
- vpaddq $T0, $ACC1, $ACC0
- vpaddq $T0, $ACC2, $ACC1
- vpmuludq 32*3+.LAVX2_POLY(%rip), $Y, $T0
- vpaddq $OVERFLOW, $ACC0, $ACC0
- vpaddq $T0, $ACC3, $ACC2
- vmovdqa $ACC4, $ACC3
- vpsllq \$18, $Y, $T0
- vmovdqa $ACC5, $ACC4
- vpmuludq %ymm14, $Y, $OVERFLOW
- vpaddq $T0, $ACC6, $ACC5
- vpmuludq %ymm15, $Y, $T0
- vpand $AND_MASK, $ACC0, $Y
- vpaddq $OVERFLOW, $ACC7, $ACC6
- vpaddq $T0, $ACC8, $ACC7
-
- #itr 6
- vpmuludq $B, $B, $OVERFLOW
- vpmuludq 32*5(%rcx), $B, $T0
- vpaddq $OVERFLOW, $ACC5, $ACC5
- vpmuludq 32*6(%rcx), $B, $OVERFLOW
- vpaddq $T0, $ACC6, $ACC6
-
- vpmuludq $AND_MASK, $Y, $T0
- vpaddq $OVERFLOW, $ACC7, $ACC7
- vpmuludq 32*7(%rcx), $B, $ACC8
- vmovdqa 32*6($a_ptr), $B
- vpaddq $T0, $ACC0, $OVERFLOW
- vpaddq $T0, $ACC1, $ACC0
- vpsrlq $digit_size, $OVERFLOW, $OVERFLOW
- vpaddq $T0, $ACC2, $ACC1
- vpmuludq 32*3(%rax), $Y, $T0
- vpaddq $OVERFLOW, $ACC0, $ACC0
- vpaddq $T0, $ACC3, $ACC2
- vmovdqa $ACC4, $ACC3
- vpsllq \$18, $Y, $T0
- vmovdqa $ACC5, $ACC4
- vpmuludq %ymm14, $Y, $OVERFLOW
- vpaddq $T0, $ACC6, $ACC5
- vpmuludq %ymm15, $Y, $T0
- vpand $AND_MASK, $ACC0, $Y
- vpaddq $OVERFLOW, $ACC7, $ACC6
- vpaddq $T0, $ACC8, $ACC7
-
- #itr 7
- vpmuludq $B, $B, $T0
- vpmuludq 32*6(%rcx), $B, $OVERFLOW
- vpaddq $T0, $ACC6, $ACC6
-
- vpmuludq $AND_MASK, $Y, $T0
- vpaddq $OVERFLOW, $ACC7, $ACC7
- vpmuludq 32*7(%rcx), $B, $ACC8
- vmovdqa 32*7($a_ptr), $B
- vpaddq $T0, $ACC0, $OVERFLOW
- vpsrlq $digit_size, $OVERFLOW, $OVERFLOW
- vpaddq $T0, $ACC1, $ACC0
- vpaddq $T0, $ACC2, $ACC1
- vpmuludq 32*3(%rax), $Y, $T0
- vpaddq $OVERFLOW, $ACC0, $ACC0
- vpaddq $T0, $ACC3, $ACC2
- vmovdqa $ACC4, $ACC3
- vpsllq \$18, $Y, $T0
- vmovdqa $ACC5, $ACC4
- vpmuludq %ymm14, $Y, $OVERFLOW
- vpaddq $T0, $ACC6, $ACC5
- vpmuludq %ymm15, $Y, $T0
- vpand $AND_MASK, $ACC0, $Y
- vpaddq $OVERFLOW, $ACC7, $ACC6
- vpaddq $T0, $ACC8, $ACC7
-
- #itr 8
- vpmuludq $B, $B, $OVERFLOW
-
- vpmuludq $AND_MASK, $Y, $T0
- vpaddq $OVERFLOW, $ACC7, $ACC7
- vpmuludq 32*7(%rcx), $B, $ACC8
- vmovdqa 32*8($a_ptr), $B
- vpaddq $T0, $ACC0, $OVERFLOW
- vpsrlq $digit_size, $OVERFLOW, $OVERFLOW
- vpaddq $T0, $ACC1, $ACC0
- vpaddq $T0, $ACC2, $ACC1
- vpmuludq 32*3(%rax), $Y, $T0
- vpaddq $OVERFLOW, $ACC0, $ACC0
- vpaddq $T0, $ACC3, $ACC2
- vmovdqa $ACC4, $ACC3
- vpsllq \$18, $Y, $T0
- vmovdqa $ACC5, $ACC4
- vpmuludq %ymm14, $Y, $OVERFLOW
- vpaddq $T0, $ACC6, $ACC5
- vpmuludq %ymm15, $Y, $T0
- vpand $AND_MASK, $ACC0, $Y
- vpaddq $OVERFLOW, $ACC7, $ACC6
- vpaddq $T0, $ACC8, $ACC7
-
- #itr 9
- vpmuludq $B, $B, $ACC8
-
- vpmuludq $AND_MASK, $Y, $T0
- vpaddq $T0, $ACC0, $OVERFLOW
- vpsrlq $digit_size, $OVERFLOW, $OVERFLOW
- vpaddq $T0, $ACC1, $ACC0
- vpaddq $T0, $ACC2, $ACC1
- vpmuludq 32*3(%rax), $Y, $T0
- vpaddq $OVERFLOW, $ACC0, $ACC0
- vpaddq $T0, $ACC3, $ACC2
- vmovdqa $ACC4, $ACC3
- vpsllq \$18, $Y, $T0
- vmovdqa $ACC5, $ACC4
- vpmuludq %ymm14, $Y, $OVERFLOW
- vpaddq $T0, $ACC6, $ACC5
- vpmuludq %ymm15, $Y, $T0
- vpaddq $OVERFLOW, $ACC7, $ACC6
- vpaddq $T0, $ACC8, $ACC7
-
- vpxor $ACC8, $ACC8, $ACC8
-
- ret
-.size avx2_sqr_x4,.-avx2_sqr_x4
-
-################################################################################
-# void avx2_sub_x4(void* RESULTx4, void *Ax4, void *Bx4);
-.type avx2_sub_x4,\@abi-omnipotent
-.align 32
-avx2_sub_x4:
- vmovdqa 32*0($a_ptr), $ACC0
- lea 160($a_ptr), $a_ptr
- lea .LAVX2_POLY_x8+128(%rip), %rax
- lea 128($b_ptr), $b_ptr
- vmovdqa 32*1-160($a_ptr), $ACC1
- vmovdqa 32*2-160($a_ptr), $ACC2
- vmovdqa 32*3-160($a_ptr), $ACC3
- vmovdqa 32*4-160($a_ptr), $ACC4
- vmovdqa 32*5-160($a_ptr), $ACC5
- vmovdqa 32*6-160($a_ptr), $ACC6
- vmovdqa 32*7-160($a_ptr), $ACC7
- vmovdqa 32*8-160($a_ptr), $ACC8
-
- vpaddq 32*0-128(%rax), $ACC0, $ACC0
- vpaddq 32*1-128(%rax), $ACC1, $ACC1
- vpaddq 32*2-128(%rax), $ACC2, $ACC2
- vpaddq 32*3-128(%rax), $ACC3, $ACC3
- vpaddq 32*4-128(%rax), $ACC4, $ACC4
- vpaddq 32*5-128(%rax), $ACC5, $ACC5
- vpaddq 32*6-128(%rax), $ACC6, $ACC6
- vpaddq 32*7-128(%rax), $ACC7, $ACC7
- vpaddq 32*8-128(%rax), $ACC8, $ACC8
-
- vpsubq 32*0-128($b_ptr), $ACC0, $ACC0
- vpsubq 32*1-128($b_ptr), $ACC1, $ACC1
- vpsubq 32*2-128($b_ptr), $ACC2, $ACC2
- vpsubq 32*3-128($b_ptr), $ACC3, $ACC3
- vpsubq 32*4-128($b_ptr), $ACC4, $ACC4
- vpsubq 32*5-128($b_ptr), $ACC5, $ACC5
- vpsubq 32*6-128($b_ptr), $ACC6, $ACC6
- vpsubq 32*7-128($b_ptr), $ACC7, $ACC7
- vpsubq 32*8-128($b_ptr), $ACC8, $ACC8
-
- ret
-.size avx2_sub_x4,.-avx2_sub_x4
-
-.type avx2_select_n_store,\@abi-omnipotent
-.align 32
-avx2_select_n_store:
- vmovdqa `8+32*9*8`(%rsp), $Y
- vpor `8+32*9*8+32`(%rsp), $Y, $Y
-
- vpandn $ACC0, $Y, $ACC0
- vpandn $ACC1, $Y, $ACC1
- vpandn $ACC2, $Y, $ACC2
- vpandn $ACC3, $Y, $ACC3
- vpandn $ACC4, $Y, $ACC4
- vpandn $ACC5, $Y, $ACC5
- vpandn $ACC6, $Y, $ACC6
- vmovdqa `8+32*9*8+32`(%rsp), $B
- vpandn $ACC7, $Y, $ACC7
- vpandn `8+32*9*8`(%rsp), $B, $B
- vpandn $ACC8, $Y, $ACC8
-
- vpand 32*0(%rsi), $B, $T0
- lea 160(%rsi), %rax
- vpand 32*1(%rsi), $B, $Y
- vpxor $T0, $ACC0, $ACC0
- vpand 32*2(%rsi), $B, $T0
- vpxor $Y, $ACC1, $ACC1
- vpand 32*3(%rsi), $B, $Y
- vpxor $T0, $ACC2, $ACC2
- vpand 32*4-160(%rax), $B, $T0
- vpxor $Y, $ACC3, $ACC3
- vpand 32*5-160(%rax), $B, $Y
- vpxor $T0, $ACC4, $ACC4
- vpand 32*6-160(%rax), $B, $T0
- vpxor $Y, $ACC5, $ACC5
- vpand 32*7-160(%rax), $B, $Y
- vpxor $T0, $ACC6, $ACC6
- vpand 32*8-160(%rax), $B, $T0
- vmovdqa `8+32*9*8+32`(%rsp), $B
- vpxor $Y, $ACC7, $ACC7
-
- vpand 32*0(%rdx), $B, $Y
- lea 160(%rdx), %rax
- vpxor $T0, $ACC8, $ACC8
- vpand 32*1(%rdx), $B, $T0
- vpxor $Y, $ACC0, $ACC0
- vpand 32*2(%rdx), $B, $Y
- vpxor $T0, $ACC1, $ACC1
- vpand 32*3(%rdx), $B, $T0
- vpxor $Y, $ACC2, $ACC2
- vpand 32*4-160(%rax), $B, $Y
- vpxor $T0, $ACC3, $ACC3
- vpand 32*5-160(%rax), $B, $T0
- vpxor $Y, $ACC4, $ACC4
- vpand 32*6-160(%rax), $B, $Y
- vpxor $T0, $ACC5, $ACC5
- vpand 32*7-160(%rax), $B, $T0
- vpxor $Y, $ACC6, $ACC6
- vpand 32*8-160(%rax), $B, $Y
- vpxor $T0, $ACC7, $ACC7
- vpxor $Y, $ACC8, $ACC8
- `&STORE`
-
- ret
-.size avx2_select_n_store,.-avx2_select_n_store
-___
-$code.=<<___ if (0); # inlined
-################################################################################
-# void avx2_mul_by2_x4(void* RESULTx4, void *Ax4);
-.type avx2_mul_by2_x4,\@abi-omnipotent
-.align 32
-avx2_mul_by2_x4:
- vmovdqa 32*0($a_ptr), $ACC0
- lea 160($a_ptr), %rax
- vmovdqa 32*1($a_ptr), $ACC1
- vmovdqa 32*2($a_ptr), $ACC2
- vmovdqa 32*3($a_ptr), $ACC3
- vmovdqa 32*4-160(%rax), $ACC4
- vmovdqa 32*5-160(%rax), $ACC5
- vmovdqa 32*6-160(%rax), $ACC6
- vmovdqa 32*7-160(%rax), $ACC7
- vmovdqa 32*8-160(%rax), $ACC8
-
- vpaddq $ACC0, $ACC0, $ACC0
- vpaddq $ACC1, $ACC1, $ACC1
- vpaddq $ACC2, $ACC2, $ACC2
- vpaddq $ACC3, $ACC3, $ACC3
- vpaddq $ACC4, $ACC4, $ACC4
- vpaddq $ACC5, $ACC5, $ACC5
- vpaddq $ACC6, $ACC6, $ACC6
- vpaddq $ACC7, $ACC7, $ACC7
- vpaddq $ACC8, $ACC8, $ACC8
-
- ret
-.size avx2_mul_by2_x4,.-avx2_mul_by2_x4
-___
-my ($r_ptr_in,$a_ptr_in,$b_ptr_in)=("%rdi","%rsi","%rdx");
-my ($r_ptr,$a_ptr,$b_ptr)=("%r8","%r9","%r10");
-
-$code.=<<___;
-################################################################################
-# void ecp_nistz256_avx2_point_add_affine_x4(void* RESULTx4, void *Ax4, void *Bx4);
-.globl ecp_nistz256_avx2_point_add_affine_x4
-.type ecp_nistz256_avx2_point_add_affine_x4,\@function,3
-.align 32
-ecp_nistz256_avx2_point_add_affine_x4:
- mov %rsp, %rax
- push %rbp
- vzeroupper
-___
-$code.=<<___ if ($win64);
- lea -16*10(%rsp), %rsp
- vmovaps %xmm6, -8-16*10(%rax)
- vmovaps %xmm7, -8-16*9(%rax)
- vmovaps %xmm8, -8-16*8(%rax)
- vmovaps %xmm9, -8-16*7(%rax)
- vmovaps %xmm10, -8-16*6(%rax)
- vmovaps %xmm11, -8-16*5(%rax)
- vmovaps %xmm12, -8-16*4(%rax)
- vmovaps %xmm13, -8-16*3(%rax)
- vmovaps %xmm14, -8-16*2(%rax)
- vmovaps %xmm15, -8-16*1(%rax)
-___
-$code.=<<___;
- lea -8(%rax), %rbp
-
-# Result + 32*0 = Result.X
-# Result + 32*9 = Result.Y
-# Result + 32*18 = Result.Z
-
-# A + 32*0 = A.X
-# A + 32*9 = A.Y
-# A + 32*18 = A.Z
-
-# B + 32*0 = B.X
-# B + 32*9 = B.Y
-
- sub \$`32*9*8+32*2+32*8`, %rsp
- and \$-64, %rsp
-
- mov $r_ptr_in, $r_ptr
- mov $a_ptr_in, $a_ptr
- mov $b_ptr_in, $b_ptr
-
- vmovdqa 32*0($a_ptr_in), %ymm0
- vmovdqa .LAVX2_AND_MASK(%rip), $AND_MASK
- vpxor %ymm1, %ymm1, %ymm1
- lea 256($a_ptr_in), %rax # size optimization
- vpor 32*1($a_ptr_in), %ymm0, %ymm0
- vpor 32*2($a_ptr_in), %ymm0, %ymm0
- vpor 32*3($a_ptr_in), %ymm0, %ymm0
- vpor 32*4-256(%rax), %ymm0, %ymm0
- lea 256(%rax), %rcx # size optimization
- vpor 32*5-256(%rax), %ymm0, %ymm0
- vpor 32*6-256(%rax), %ymm0, %ymm0
- vpor 32*7-256(%rax), %ymm0, %ymm0
- vpor 32*8-256(%rax), %ymm0, %ymm0
- vpor 32*9-256(%rax), %ymm0, %ymm0
- vpor 32*10-256(%rax), %ymm0, %ymm0
- vpor 32*11-256(%rax), %ymm0, %ymm0
- vpor 32*12-512(%rcx), %ymm0, %ymm0
- vpor 32*13-512(%rcx), %ymm0, %ymm0
- vpor 32*14-512(%rcx), %ymm0, %ymm0
- vpor 32*15-512(%rcx), %ymm0, %ymm0
- vpor 32*16-512(%rcx), %ymm0, %ymm0
- vpor 32*17-512(%rcx), %ymm0, %ymm0
- vpcmpeqq %ymm1, %ymm0, %ymm0
- vmovdqa %ymm0, `32*9*8`(%rsp)
-
- vpxor %ymm1, %ymm1, %ymm1
- vmovdqa 32*0($b_ptr), %ymm0
- lea 256($b_ptr), %rax # size optimization
- vpor 32*1($b_ptr), %ymm0, %ymm0
- vpor 32*2($b_ptr), %ymm0, %ymm0
- vpor 32*3($b_ptr), %ymm0, %ymm0
- vpor 32*4-256(%rax), %ymm0, %ymm0
- lea 256(%rax), %rcx # size optimization
- vpor 32*5-256(%rax), %ymm0, %ymm0
- vpor 32*6-256(%rax), %ymm0, %ymm0
- vpor 32*7-256(%rax), %ymm0, %ymm0
- vpor 32*8-256(%rax), %ymm0, %ymm0
- vpor 32*9-256(%rax), %ymm0, %ymm0
- vpor 32*10-256(%rax), %ymm0, %ymm0
- vpor 32*11-256(%rax), %ymm0, %ymm0
- vpor 32*12-512(%rcx), %ymm0, %ymm0
- vpor 32*13-512(%rcx), %ymm0, %ymm0
- vpor 32*14-512(%rcx), %ymm0, %ymm0
- vpor 32*15-512(%rcx), %ymm0, %ymm0
- vpor 32*16-512(%rcx), %ymm0, %ymm0
- vpor 32*17-512(%rcx), %ymm0, %ymm0
- vpcmpeqq %ymm1, %ymm0, %ymm0
- vmovdqa %ymm0, `32*9*8+32`(%rsp)
-
- # Z1^2 = Z1*Z1
- lea `32*9*2`($a_ptr), %rsi
- lea `32*9*2`(%rsp), %rdi
- lea `32*9*8+32*2`(%rsp), %rcx # temporary vector
- call avx2_sqr_x4
- call avx2_normalize_n_store
-
- # U2 = X2*Z1^2
- lea `32*9*0`($b_ptr), %rsi
- lea `32*9*2`(%rsp), %rdx
- lea `32*9*0`(%rsp), %rdi
- call avx2_mul_x4
- #call avx2_normalize
- `&STORE`
-
- # S2 = Z1*Z1^2 = Z1^3
- lea `32*9*2`($a_ptr), %rsi
- lea `32*9*2`(%rsp), %rdx
- lea `32*9*1`(%rsp), %rdi
- call avx2_mul_x4
- call avx2_normalize_n_store
-
- # S2 = S2*Y2 = Y2*Z1^3
- lea `32*9*1`($b_ptr), %rsi
- lea `32*9*1`(%rsp), %rdx
- lea `32*9*1`(%rsp), %rdi
- call avx2_mul_x4
- call avx2_normalize_n_store
-
- # H = U2 - U1 = U2 - X1
- lea `32*9*0`(%rsp), %rsi
- lea `32*9*0`($a_ptr), %rdx
- lea `32*9*3`(%rsp), %rdi
- call avx2_sub_x4
- call avx2_normalize_n_store
-
- # R = S2 - S1 = S2 - Y1
- lea `32*9*1`(%rsp), %rsi
- lea `32*9*1`($a_ptr), %rdx
- lea `32*9*4`(%rsp), %rdi
- call avx2_sub_x4
- call avx2_normalize_n_store
-
- # Z3 = H*Z1*Z2
- lea `32*9*3`(%rsp), %rsi
- lea `32*9*2`($a_ptr), %rdx
- lea `32*9*2`($r_ptr), %rdi
- call avx2_mul_x4
- call avx2_normalize
-
- lea .LONE(%rip), %rsi
- lea `32*9*2`($a_ptr), %rdx
- call avx2_select_n_store
-
- # R^2 = R^2
- lea `32*9*4`(%rsp), %rsi
- lea `32*9*6`(%rsp), %rdi
- lea `32*9*8+32*2`(%rsp), %rcx # temporary vector
- call avx2_sqr_x4
- call avx2_normalize_n_store
-
- # H^2 = H^2
- lea `32*9*3`(%rsp), %rsi
- lea `32*9*5`(%rsp), %rdi
- call avx2_sqr_x4
- call avx2_normalize_n_store
-
- # H^3 = H^2*H
- lea `32*9*3`(%rsp), %rsi
- lea `32*9*5`(%rsp), %rdx
- lea `32*9*7`(%rsp), %rdi
- call avx2_mul_x4
- call avx2_normalize_n_store
-
- # U2 = U1*H^2
- lea `32*9*0`($a_ptr), %rsi
- lea `32*9*5`(%rsp), %rdx
- lea `32*9*0`(%rsp), %rdi
- call avx2_mul_x4
- #call avx2_normalize
- `&STORE`
-
- # Hsqr = U2*2
- #lea 32*9*0(%rsp), %rsi
- #lea 32*9*5(%rsp), %rdi
- #call avx2_mul_by2_x4
-
- vpaddq $ACC0, $ACC0, $ACC0 # inlined avx2_mul_by2_x4
- lea `32*9*5`(%rsp), %rdi
- vpaddq $ACC1, $ACC1, $ACC1
- vpaddq $ACC2, $ACC2, $ACC2
- vpaddq $ACC3, $ACC3, $ACC3
- vpaddq $ACC4, $ACC4, $ACC4
- vpaddq $ACC5, $ACC5, $ACC5
- vpaddq $ACC6, $ACC6, $ACC6
- vpaddq $ACC7, $ACC7, $ACC7
- vpaddq $ACC8, $ACC8, $ACC8
- call avx2_normalize_n_store
-
- # X3 = R^2 - H^3
- #lea 32*9*6(%rsp), %rsi
- #lea 32*9*7(%rsp), %rdx
- #lea 32*9*5(%rsp), %rcx
- #lea 32*9*0($r_ptr), %rdi
- #call avx2_sub_x4
- #NORMALIZE
- #STORE
-
- # X3 = X3 - U2*2
- #lea 32*9*0($r_ptr), %rsi
- #lea 32*9*0($r_ptr), %rdi
- #call avx2_sub_x4
- #NORMALIZE
- #STORE
-
- lea `32*9*6+128`(%rsp), %rsi
- lea .LAVX2_POLY_x2+128(%rip), %rax
- lea `32*9*7+128`(%rsp), %rdx
- lea `32*9*5+128`(%rsp), %rcx
- lea `32*9*0`($r_ptr), %rdi
-
- vmovdqa 32*0-128(%rsi), $ACC0
- vmovdqa 32*1-128(%rsi), $ACC1
- vmovdqa 32*2-128(%rsi), $ACC2
- vmovdqa 32*3-128(%rsi), $ACC3
- vmovdqa 32*4-128(%rsi), $ACC4
- vmovdqa 32*5-128(%rsi), $ACC5
- vmovdqa 32*6-128(%rsi), $ACC6
- vmovdqa 32*7-128(%rsi), $ACC7
- vmovdqa 32*8-128(%rsi), $ACC8
-
- vpaddq 32*0-128(%rax), $ACC0, $ACC0
- vpaddq 32*1-128(%rax), $ACC1, $ACC1
- vpaddq 32*2-128(%rax), $ACC2, $ACC2
- vpaddq 32*3-128(%rax), $ACC3, $ACC3
- vpaddq 32*4-128(%rax), $ACC4, $ACC4
- vpaddq 32*5-128(%rax), $ACC5, $ACC5
- vpaddq 32*6-128(%rax), $ACC6, $ACC6
- vpaddq 32*7-128(%rax), $ACC7, $ACC7
- vpaddq 32*8-128(%rax), $ACC8, $ACC8
-
- vpsubq 32*0-128(%rdx), $ACC0, $ACC0
- vpsubq 32*1-128(%rdx), $ACC1, $ACC1
- vpsubq 32*2-128(%rdx), $ACC2, $ACC2
- vpsubq 32*3-128(%rdx), $ACC3, $ACC3
- vpsubq 32*4-128(%rdx), $ACC4, $ACC4
- vpsubq 32*5-128(%rdx), $ACC5, $ACC5
- vpsubq 32*6-128(%rdx), $ACC6, $ACC6
- vpsubq 32*7-128(%rdx), $ACC7, $ACC7
- vpsubq 32*8-128(%rdx), $ACC8, $ACC8
-
- vpsubq 32*0-128(%rcx), $ACC0, $ACC0
- vpsubq 32*1-128(%rcx), $ACC1, $ACC1
- vpsubq 32*2-128(%rcx), $ACC2, $ACC2
- vpsubq 32*3-128(%rcx), $ACC3, $ACC3
- vpsubq 32*4-128(%rcx), $ACC4, $ACC4
- vpsubq 32*5-128(%rcx), $ACC5, $ACC5
- vpsubq 32*6-128(%rcx), $ACC6, $ACC6
- vpsubq 32*7-128(%rcx), $ACC7, $ACC7
- vpsubq 32*8-128(%rcx), $ACC8, $ACC8
- call avx2_normalize
-
- lea 32*0($b_ptr), %rsi
- lea 32*0($a_ptr), %rdx
- call avx2_select_n_store
-
- # H = U2 - X3
- lea `32*9*0`(%rsp), %rsi
- lea `32*9*0`($r_ptr), %rdx
- lea `32*9*3`(%rsp), %rdi
- call avx2_sub_x4
- call avx2_normalize_n_store
-
- #
- lea `32*9*3`(%rsp), %rsi
- lea `32*9*4`(%rsp), %rdx
- lea `32*9*3`(%rsp), %rdi
- call avx2_mul_x4
- call avx2_normalize_n_store
-
- #
- lea `32*9*7`(%rsp), %rsi
- lea `32*9*1`($a_ptr), %rdx
- lea `32*9*1`(%rsp), %rdi
- call avx2_mul_x4
- call avx2_normalize_n_store
-
- #
- lea `32*9*3`(%rsp), %rsi
- lea `32*9*1`(%rsp), %rdx
- lea `32*9*1`($r_ptr), %rdi
- call avx2_sub_x4
- call avx2_normalize
-
- lea 32*9($b_ptr), %rsi
- lea 32*9($a_ptr), %rdx
- call avx2_select_n_store
-
- #lea 32*9*0($r_ptr), %rsi
- #lea 32*9*0($r_ptr), %rdi
- #call avx2_mul_by1_x4
- #NORMALIZE
- #STORE
-
- lea `32*9*1`($r_ptr), %rsi
- lea `32*9*1`($r_ptr), %rdi
- call avx2_mul_by1_x4
- call avx2_normalize_n_store
-
- vzeroupper
-___
-$code.=<<___ if ($win64);
- movaps %xmm6, -16*10(%rbp)
- movaps %xmm7, -16*9(%rbp)
- movaps %xmm8, -16*8(%rbp)
- movaps %xmm9, -16*7(%rbp)
- movaps %xmm10, -16*6(%rbp)
- movaps %xmm11, -16*5(%rbp)
- movaps %xmm12, -16*4(%rbp)
- movaps %xmm13, -16*3(%rbp)
- movaps %xmm14, -16*2(%rbp)
- movaps %xmm15, -16*1(%rbp)
-___
-$code.=<<___;
- mov %rbp, %rsp
- pop %rbp
- ret
-.size ecp_nistz256_avx2_point_add_affine_x4,.-ecp_nistz256_avx2_point_add_affine_x4
-
-################################################################################
-# void ecp_nistz256_avx2_point_add_affines_x4(void* RESULTx4, void *Ax4, void *Bx4);
-.globl ecp_nistz256_avx2_point_add_affines_x4
-.type ecp_nistz256_avx2_point_add_affines_x4,\@function,3
-.align 32
-ecp_nistz256_avx2_point_add_affines_x4:
- mov %rsp, %rax
- push %rbp
- vzeroupper
-___
-$code.=<<___ if ($win64);
- lea -16*10(%rsp), %rsp
- vmovaps %xmm6, -8-16*10(%rax)
- vmovaps %xmm7, -8-16*9(%rax)
- vmovaps %xmm8, -8-16*8(%rax)
- vmovaps %xmm9, -8-16*7(%rax)
- vmovaps %xmm10, -8-16*6(%rax)
- vmovaps %xmm11, -8-16*5(%rax)
- vmovaps %xmm12, -8-16*4(%rax)
- vmovaps %xmm13, -8-16*3(%rax)
- vmovaps %xmm14, -8-16*2(%rax)
- vmovaps %xmm15, -8-16*1(%rax)
-___
-$code.=<<___;
- lea -8(%rax), %rbp
-
-# Result + 32*0 = Result.X
-# Result + 32*9 = Result.Y
-# Result + 32*18 = Result.Z
-
-# A + 32*0 = A.X
-# A + 32*9 = A.Y
-
-# B + 32*0 = B.X
-# B + 32*9 = B.Y
-
- sub \$`32*9*8+32*2+32*8`, %rsp
- and \$-64, %rsp
-
- mov $r_ptr_in, $r_ptr
- mov $a_ptr_in, $a_ptr
- mov $b_ptr_in, $b_ptr
-
- vmovdqa 32*0($a_ptr_in), %ymm0
- vmovdqa .LAVX2_AND_MASK(%rip), $AND_MASK
- vpxor %ymm1, %ymm1, %ymm1
- lea 256($a_ptr_in), %rax # size optimization
- vpor 32*1($a_ptr_in), %ymm0, %ymm0
- vpor 32*2($a_ptr_in), %ymm0, %ymm0
- vpor 32*3($a_ptr_in), %ymm0, %ymm0
- vpor 32*4-256(%rax), %ymm0, %ymm0
- lea 256(%rax), %rcx # size optimization
- vpor 32*5-256(%rax), %ymm0, %ymm0
- vpor 32*6-256(%rax), %ymm0, %ymm0
- vpor 32*7-256(%rax), %ymm0, %ymm0
- vpor 32*8-256(%rax), %ymm0, %ymm0
- vpor 32*9-256(%rax), %ymm0, %ymm0
- vpor 32*10-256(%rax), %ymm0, %ymm0
- vpor 32*11-256(%rax), %ymm0, %ymm0
- vpor 32*12-512(%rcx), %ymm0, %ymm0
- vpor 32*13-512(%rcx), %ymm0, %ymm0
- vpor 32*14-512(%rcx), %ymm0, %ymm0
- vpor 32*15-512(%rcx), %ymm0, %ymm0
- vpor 32*16-512(%rcx), %ymm0, %ymm0
- vpor 32*17-512(%rcx), %ymm0, %ymm0
- vpcmpeqq %ymm1, %ymm0, %ymm0
- vmovdqa %ymm0, `32*9*8`(%rsp)
-
- vpxor %ymm1, %ymm1, %ymm1
- vmovdqa 32*0($b_ptr), %ymm0
- lea 256($b_ptr), %rax # size optimization
- vpor 32*1($b_ptr), %ymm0, %ymm0
- vpor 32*2($b_ptr), %ymm0, %ymm0
- vpor 32*3($b_ptr), %ymm0, %ymm0
- vpor 32*4-256(%rax), %ymm0, %ymm0
- lea 256(%rax), %rcx # size optimization
- vpor 32*5-256(%rax), %ymm0, %ymm0
- vpor 32*6-256(%rax), %ymm0, %ymm0
- vpor 32*7-256(%rax), %ymm0, %ymm0
- vpor 32*8-256(%rax), %ymm0, %ymm0
- vpor 32*9-256(%rax), %ymm0, %ymm0
- vpor 32*10-256(%rax), %ymm0, %ymm0
- vpor 32*11-256(%rax), %ymm0, %ymm0
- vpor 32*12-512(%rcx), %ymm0, %ymm0
- vpor 32*13-512(%rcx), %ymm0, %ymm0
- vpor 32*14-512(%rcx), %ymm0, %ymm0
- vpor 32*15-512(%rcx), %ymm0, %ymm0
- vpor 32*16-512(%rcx), %ymm0, %ymm0
- vpor 32*17-512(%rcx), %ymm0, %ymm0
- vpcmpeqq %ymm1, %ymm0, %ymm0
- vmovdqa %ymm0, `32*9*8+32`(%rsp)
-
- # H = U2 - U1 = X2 - X1
- lea `32*9*0`($b_ptr), %rsi
- lea `32*9*0`($a_ptr), %rdx
- lea `32*9*3`(%rsp), %rdi
- call avx2_sub_x4
- call avx2_normalize_n_store
-
- # R = S2 - S1 = Y2 - Y1
- lea `32*9*1`($b_ptr), %rsi
- lea `32*9*1`($a_ptr), %rdx
- lea `32*9*4`(%rsp), %rdi
- call avx2_sub_x4
- call avx2_normalize_n_store
-
- # Z3 = H*Z1*Z2 = H
- lea `32*9*3`(%rsp), %rsi
- lea `32*9*2`($r_ptr), %rdi
- call avx2_mul_by1_x4
- call avx2_normalize
-
- vmovdqa `32*9*8`(%rsp), $B
- vpor `32*9*8+32`(%rsp), $B, $B
-
- vpandn $ACC0, $B, $ACC0
- lea .LONE+128(%rip), %rax
- vpandn $ACC1, $B, $ACC1
- vpandn $ACC2, $B, $ACC2
- vpandn $ACC3, $B, $ACC3
- vpandn $ACC4, $B, $ACC4
- vpandn $ACC5, $B, $ACC5
- vpandn $ACC6, $B, $ACC6
- vpandn $ACC7, $B, $ACC7
-
- vpand 32*0-128(%rax), $B, $T0
- vpandn $ACC8, $B, $ACC8
- vpand 32*1-128(%rax), $B, $Y
- vpxor $T0, $ACC0, $ACC0
- vpand 32*2-128(%rax), $B, $T0
- vpxor $Y, $ACC1, $ACC1
- vpand 32*3-128(%rax), $B, $Y
- vpxor $T0, $ACC2, $ACC2
- vpand 32*4-128(%rax), $B, $T0
- vpxor $Y, $ACC3, $ACC3
- vpand 32*5-128(%rax), $B, $Y
- vpxor $T0, $ACC4, $ACC4
- vpand 32*6-128(%rax), $B, $T0
- vpxor $Y, $ACC5, $ACC5
- vpand 32*7-128(%rax), $B, $Y
- vpxor $T0, $ACC6, $ACC6
- vpand 32*8-128(%rax), $B, $T0
- vpxor $Y, $ACC7, $ACC7
- vpxor $T0, $ACC8, $ACC8
- `&STORE`
-
- # R^2 = R^2
- lea `32*9*4`(%rsp), %rsi
- lea `32*9*6`(%rsp), %rdi
- lea `32*9*8+32*2`(%rsp), %rcx # temporary vector
- call avx2_sqr_x4
- call avx2_normalize_n_store
-
- # H^2 = H^2
- lea `32*9*3`(%rsp), %rsi
- lea `32*9*5`(%rsp), %rdi
- call avx2_sqr_x4
- call avx2_normalize_n_store
-
- # H^3 = H^2*H
- lea `32*9*3`(%rsp), %rsi
- lea `32*9*5`(%rsp), %rdx
- lea `32*9*7`(%rsp), %rdi
- call avx2_mul_x4
- call avx2_normalize_n_store
-
- # U2 = U1*H^2
- lea `32*9*0`($a_ptr), %rsi
- lea `32*9*5`(%rsp), %rdx
- lea `32*9*0`(%rsp), %rdi
- call avx2_mul_x4
- #call avx2_normalize
- `&STORE`
-
- # Hsqr = U2*2
- #lea 32*9*0(%rsp), %rsi
- #lea 32*9*5(%rsp), %rdi
- #call avx2_mul_by2_x4
-
- vpaddq $ACC0, $ACC0, $ACC0 # inlined avx2_mul_by2_x4
- lea `32*9*5`(%rsp), %rdi
- vpaddq $ACC1, $ACC1, $ACC1
- vpaddq $ACC2, $ACC2, $ACC2
- vpaddq $ACC3, $ACC3, $ACC3
- vpaddq $ACC4, $ACC4, $ACC4
- vpaddq $ACC5, $ACC5, $ACC5
- vpaddq $ACC6, $ACC6, $ACC6
- vpaddq $ACC7, $ACC7, $ACC7
- vpaddq $ACC8, $ACC8, $ACC8
- call avx2_normalize_n_store
-
- # X3 = R^2 - H^3
- #lea 32*9*6(%rsp), %rsi
- #lea 32*9*7(%rsp), %rdx
- #lea 32*9*5(%rsp), %rcx
- #lea 32*9*0($r_ptr), %rdi
- #call avx2_sub_x4
- #NORMALIZE
- #STORE
-
- # X3 = X3 - U2*2
- #lea 32*9*0($r_ptr), %rsi
- #lea 32*9*0($r_ptr), %rdi
- #call avx2_sub_x4
- #NORMALIZE
- #STORE
-
- lea `32*9*6+128`(%rsp), %rsi
- lea .LAVX2_POLY_x2+128(%rip), %rax
- lea `32*9*7+128`(%rsp), %rdx
- lea `32*9*5+128`(%rsp), %rcx
- lea `32*9*0`($r_ptr), %rdi
-
- vmovdqa 32*0-128(%rsi), $ACC0
- vmovdqa 32*1-128(%rsi), $ACC1
- vmovdqa 32*2-128(%rsi), $ACC2
- vmovdqa 32*3-128(%rsi), $ACC3
- vmovdqa 32*4-128(%rsi), $ACC4
- vmovdqa 32*5-128(%rsi), $ACC5
- vmovdqa 32*6-128(%rsi), $ACC6
- vmovdqa 32*7-128(%rsi), $ACC7
- vmovdqa 32*8-128(%rsi), $ACC8
-
- vpaddq 32*0-128(%rax), $ACC0, $ACC0
- vpaddq 32*1-128(%rax), $ACC1, $ACC1
- vpaddq 32*2-128(%rax), $ACC2, $ACC2
- vpaddq 32*3-128(%rax), $ACC3, $ACC3
- vpaddq 32*4-128(%rax), $ACC4, $ACC4
- vpaddq 32*5-128(%rax), $ACC5, $ACC5
- vpaddq 32*6-128(%rax), $ACC6, $ACC6
- vpaddq 32*7-128(%rax), $ACC7, $ACC7
- vpaddq 32*8-128(%rax), $ACC8, $ACC8
-
- vpsubq 32*0-128(%rdx), $ACC0, $ACC0
- vpsubq 32*1-128(%rdx), $ACC1, $ACC1
- vpsubq 32*2-128(%rdx), $ACC2, $ACC2
- vpsubq 32*3-128(%rdx), $ACC3, $ACC3
- vpsubq 32*4-128(%rdx), $ACC4, $ACC4
- vpsubq 32*5-128(%rdx), $ACC5, $ACC5
- vpsubq 32*6-128(%rdx), $ACC6, $ACC6
- vpsubq 32*7-128(%rdx), $ACC7, $ACC7
- vpsubq 32*8-128(%rdx), $ACC8, $ACC8
-
- vpsubq 32*0-128(%rcx), $ACC0, $ACC0
- vpsubq 32*1-128(%rcx), $ACC1, $ACC1
- vpsubq 32*2-128(%rcx), $ACC2, $ACC2
- vpsubq 32*3-128(%rcx), $ACC3, $ACC3
- vpsubq 32*4-128(%rcx), $ACC4, $ACC4
- vpsubq 32*5-128(%rcx), $ACC5, $ACC5
- vpsubq 32*6-128(%rcx), $ACC6, $ACC6
- vpsubq 32*7-128(%rcx), $ACC7, $ACC7
- vpsubq 32*8-128(%rcx), $ACC8, $ACC8
- call avx2_normalize
-
- lea 32*0($b_ptr), %rsi
- lea 32*0($a_ptr), %rdx
- call avx2_select_n_store
-
- # H = U2 - X3
- lea `32*9*0`(%rsp), %rsi
- lea `32*9*0`($r_ptr), %rdx
- lea `32*9*3`(%rsp), %rdi
- call avx2_sub_x4
- call avx2_normalize_n_store
-
- # H = H*R
- lea `32*9*3`(%rsp), %rsi
- lea `32*9*4`(%rsp), %rdx
- lea `32*9*3`(%rsp), %rdi
- call avx2_mul_x4
- call avx2_normalize_n_store
-
- # S2 = S1 * H^3
- lea `32*9*7`(%rsp), %rsi
- lea `32*9*1`($a_ptr), %rdx
- lea `32*9*1`(%rsp), %rdi
- call avx2_mul_x4
- call avx2_normalize_n_store
-
- #
- lea `32*9*3`(%rsp), %rsi
- lea `32*9*1`(%rsp), %rdx
- lea `32*9*1`($r_ptr), %rdi
- call avx2_sub_x4
- call avx2_normalize
-
- lea 32*9($b_ptr), %rsi
- lea 32*9($a_ptr), %rdx
- call avx2_select_n_store
-
- #lea 32*9*0($r_ptr), %rsi
- #lea 32*9*0($r_ptr), %rdi
- #call avx2_mul_by1_x4
- #NORMALIZE
- #STORE
-
- lea `32*9*1`($r_ptr), %rsi
- lea `32*9*1`($r_ptr), %rdi
- call avx2_mul_by1_x4
- call avx2_normalize_n_store
-
- vzeroupper
-___
-$code.=<<___ if ($win64);
- movaps %xmm6, -16*10(%rbp)
- movaps %xmm7, -16*9(%rbp)
- movaps %xmm8, -16*8(%rbp)
- movaps %xmm9, -16*7(%rbp)
- movaps %xmm10, -16*6(%rbp)
- movaps %xmm11, -16*5(%rbp)
- movaps %xmm12, -16*4(%rbp)
- movaps %xmm13, -16*3(%rbp)
- movaps %xmm14, -16*2(%rbp)
- movaps %xmm15, -16*1(%rbp)
-___
-$code.=<<___;
- mov %rbp, %rsp
- pop %rbp
- ret
-.size ecp_nistz256_avx2_point_add_affines_x4,.-ecp_nistz256_avx2_point_add_affines_x4
-
-################################################################################
-# void ecp_nistz256_avx2_to_mont(void* RESULTx4, void *Ax4);
-.globl ecp_nistz256_avx2_to_mont
-.type ecp_nistz256_avx2_to_mont,\@function,2
-.align 32
-ecp_nistz256_avx2_to_mont:
- vzeroupper
-___
-$code.=<<___ if ($win64);
- lea -8-16*10(%rsp), %rsp
- vmovaps %xmm6, -8-16*10(%rax)
- vmovaps %xmm7, -8-16*9(%rax)
- vmovaps %xmm8, -8-16*8(%rax)
- vmovaps %xmm9, -8-16*7(%rax)
- vmovaps %xmm10, -8-16*6(%rax)
- vmovaps %xmm11, -8-16*5(%rax)
- vmovaps %xmm12, -8-16*4(%rax)
- vmovaps %xmm13, -8-16*3(%rax)
- vmovaps %xmm14, -8-16*2(%rax)
- vmovaps %xmm15, -8-16*1(%rax)
-___
-$code.=<<___;
- vmovdqa .LAVX2_AND_MASK(%rip), $AND_MASK
- lea .LTO_MONT_AVX2(%rip), %rdx
- call avx2_mul_x4
- call avx2_normalize_n_store
-
- vzeroupper
-___
-$code.=<<___ if ($win64);
- movaps 16*0(%rsp), %xmm6
- movaps 16*1(%rsp), %xmm7
- movaps 16*2(%rsp), %xmm8
- movaps 16*3(%rsp), %xmm9
- movaps 16*4(%rsp), %xmm10
- movaps 16*5(%rsp), %xmm11
- movaps 16*6(%rsp), %xmm12
- movaps 16*7(%rsp), %xmm13
- movaps 16*8(%rsp), %xmm14
- movaps 16*9(%rsp), %xmm15
- lea 8+16*10(%rsp), %rsp
-___
-$code.=<<___;
- ret
-.size ecp_nistz256_avx2_to_mont,.-ecp_nistz256_avx2_to_mont
-
-################################################################################
-# void ecp_nistz256_avx2_from_mont(void* RESULTx4, void *Ax4);
-.globl ecp_nistz256_avx2_from_mont
-.type ecp_nistz256_avx2_from_mont,\@function,2
-.align 32
-ecp_nistz256_avx2_from_mont:
- vzeroupper
-___
-$code.=<<___ if ($win64);
- lea -8-16*10(%rsp), %rsp
- vmovaps %xmm6, -8-16*10(%rax)
- vmovaps %xmm7, -8-16*9(%rax)
- vmovaps %xmm8, -8-16*8(%rax)
- vmovaps %xmm9, -8-16*7(%rax)
- vmovaps %xmm10, -8-16*6(%rax)
- vmovaps %xmm11, -8-16*5(%rax)
- vmovaps %xmm12, -8-16*4(%rax)
- vmovaps %xmm13, -8-16*3(%rax)
- vmovaps %xmm14, -8-16*2(%rax)
- vmovaps %xmm15, -8-16*1(%rax)
-___
-$code.=<<___;
- vmovdqa .LAVX2_AND_MASK(%rip), $AND_MASK
- lea .LFROM_MONT_AVX2(%rip), %rdx
- call avx2_mul_x4
- call avx2_normalize_n_store
-
- vzeroupper
-___
-$code.=<<___ if ($win64);
- movaps 16*0(%rsp), %xmm6
- movaps 16*1(%rsp), %xmm7
- movaps 16*2(%rsp), %xmm8
- movaps 16*3(%rsp), %xmm9
- movaps 16*4(%rsp), %xmm10
- movaps 16*5(%rsp), %xmm11
- movaps 16*6(%rsp), %xmm12
- movaps 16*7(%rsp), %xmm13
- movaps 16*8(%rsp), %xmm14
- movaps 16*9(%rsp), %xmm15
- lea 8+16*10(%rsp), %rsp
-___
-$code.=<<___;
- ret
-.size ecp_nistz256_avx2_from_mont,.-ecp_nistz256_avx2_from_mont
-
-################################################################################
-# void ecp_nistz256_avx2_set1(void* RESULTx4);
-.globl ecp_nistz256_avx2_set1
-.type ecp_nistz256_avx2_set1,\@function,1
-.align 32
-ecp_nistz256_avx2_set1:
- lea .LONE+128(%rip), %rax
- lea 128(%rdi), %rdi
- vzeroupper
- vmovdqa 32*0-128(%rax), %ymm0
- vmovdqa 32*1-128(%rax), %ymm1
- vmovdqa 32*2-128(%rax), %ymm2
- vmovdqa 32*3-128(%rax), %ymm3
- vmovdqa 32*4-128(%rax), %ymm4
- vmovdqa 32*5-128(%rax), %ymm5
- vmovdqa %ymm0, 32*0-128(%rdi)
- vmovdqa 32*6-128(%rax), %ymm0
- vmovdqa %ymm1, 32*1-128(%rdi)
- vmovdqa 32*7-128(%rax), %ymm1
- vmovdqa %ymm2, 32*2-128(%rdi)
- vmovdqa 32*8-128(%rax), %ymm2
- vmovdqa %ymm3, 32*3-128(%rdi)
- vmovdqa %ymm4, 32*4-128(%rdi)
- vmovdqa %ymm5, 32*5-128(%rdi)
- vmovdqa %ymm0, 32*6-128(%rdi)
- vmovdqa %ymm1, 32*7-128(%rdi)
- vmovdqa %ymm2, 32*8-128(%rdi)
-
- vzeroupper
- ret
-.size ecp_nistz256_avx2_set1,.-ecp_nistz256_avx2_set1
-___
-}
-{
-################################################################################
-# void ecp_nistz256_avx2_multi_gather_w7(void* RESULT, void *in,
-# int index0, int index1, int index2, int index3);
-################################################################################
-
-my ($val,$in_t,$index0,$index1,$index2,$index3)=("%rdi","%rsi","%edx","%ecx","%r8d","%r9d");
-my ($INDEX0,$INDEX1,$INDEX2,$INDEX3)=map("%ymm$_",(0..3));
-my ($R0a,$R0b,$R1a,$R1b,$R2a,$R2b,$R3a,$R3b)=map("%ymm$_",(4..11));
-my ($M0,$T0,$T1,$TMP0)=map("%ymm$_",(12..15));
-
-$code.=<<___;
-.globl ecp_nistz256_avx2_multi_gather_w7
-.type ecp_nistz256_avx2_multi_gather_w7,\@function,6
-.align 32
-ecp_nistz256_avx2_multi_gather_w7:
- vzeroupper
-___
-$code.=<<___ if ($win64);
- lea -8-16*10(%rsp), %rsp
- vmovaps %xmm6, -8-16*10(%rax)
- vmovaps %xmm7, -8-16*9(%rax)
- vmovaps %xmm8, -8-16*8(%rax)
- vmovaps %xmm9, -8-16*7(%rax)
- vmovaps %xmm10, -8-16*6(%rax)
- vmovaps %xmm11, -8-16*5(%rax)
- vmovaps %xmm12, -8-16*4(%rax)
- vmovaps %xmm13, -8-16*3(%rax)
- vmovaps %xmm14, -8-16*2(%rax)
- vmovaps %xmm15, -8-16*1(%rax)
-___
-$code.=<<___;
- lea .LIntOne(%rip), %rax
-
- vmovd $index0, %xmm0
- vmovd $index1, %xmm1
- vmovd $index2, %xmm2
- vmovd $index3, %xmm3
-
- vpxor $R0a, $R0a, $R0a
- vpxor $R0b, $R0b, $R0b
- vpxor $R1a, $R1a, $R1a
- vpxor $R1b, $R1b, $R1b
- vpxor $R2a, $R2a, $R2a
- vpxor $R2b, $R2b, $R2b
- vpxor $R3a, $R3a, $R3a
- vpxor $R3b, $R3b, $R3b
- vmovdqa (%rax), $M0
-
- vpermd $INDEX0, $R0a, $INDEX0
- vpermd $INDEX1, $R0a, $INDEX1
- vpermd $INDEX2, $R0a, $INDEX2
- vpermd $INDEX3, $R0a, $INDEX3
-
- mov \$64, %ecx
- lea 112($val), $val # size optimization
- jmp .Lmulti_select_loop_avx2
-
-# INDEX=0, corresponds to the point at infty (0,0)
-.align 32
-.Lmulti_select_loop_avx2:
- vpcmpeqd $INDEX0, $M0, $TMP0
-
- vmovdqa `32*0+32*64*2*0`($in_t), $T0
- vmovdqa `32*1+32*64*2*0`($in_t), $T1
- vpand $TMP0, $T0, $T0
- vpand $TMP0, $T1, $T1
- vpxor $T0, $R0a, $R0a
- vpxor $T1, $R0b, $R0b
-
- vpcmpeqd $INDEX1, $M0, $TMP0
-
- vmovdqa `32*0+32*64*2*1`($in_t), $T0
- vmovdqa `32*1+32*64*2*1`($in_t), $T1
- vpand $TMP0, $T0, $T0
- vpand $TMP0, $T1, $T1
- vpxor $T0, $R1a, $R1a
- vpxor $T1, $R1b, $R1b
-
- vpcmpeqd $INDEX2, $M0, $TMP0
-
- vmovdqa `32*0+32*64*2*2`($in_t), $T0
- vmovdqa `32*1+32*64*2*2`($in_t), $T1
- vpand $TMP0, $T0, $T0
- vpand $TMP0, $T1, $T1
- vpxor $T0, $R2a, $R2a
- vpxor $T1, $R2b, $R2b
-
- vpcmpeqd $INDEX3, $M0, $TMP0
-
- vmovdqa `32*0+32*64*2*3`($in_t), $T0
- vmovdqa `32*1+32*64*2*3`($in_t), $T1
- vpand $TMP0, $T0, $T0
- vpand $TMP0, $T1, $T1
- vpxor $T0, $R3a, $R3a
- vpxor $T1, $R3b, $R3b
-
- vpaddd (%rax), $M0, $M0 # increment
- lea 32*2($in_t), $in_t
-
- dec %ecx
- jnz .Lmulti_select_loop_avx2
-
- vmovdqu $R0a, 32*0-112($val)
- vmovdqu $R0b, 32*1-112($val)
- vmovdqu $R1a, 32*2-112($val)
- vmovdqu $R1b, 32*3-112($val)
- vmovdqu $R2a, 32*4-112($val)
- vmovdqu $R2b, 32*5-112($val)
- vmovdqu $R3a, 32*6-112($val)
- vmovdqu $R3b, 32*7-112($val)
-
- vzeroupper
-___
-$code.=<<___ if ($win64);
- movaps 16*0(%rsp), %xmm6
- movaps 16*1(%rsp), %xmm7
- movaps 16*2(%rsp), %xmm8
- movaps 16*3(%rsp), %xmm9
- movaps 16*4(%rsp), %xmm10
- movaps 16*5(%rsp), %xmm11
- movaps 16*6(%rsp), %xmm12
- movaps 16*7(%rsp), %xmm13
- movaps 16*8(%rsp), %xmm14
- movaps 16*9(%rsp), %xmm15
- lea 8+16*10(%rsp), %rsp
-___
-$code.=<<___;
- ret
-.size ecp_nistz256_avx2_multi_gather_w7,.-ecp_nistz256_avx2_multi_gather_w7
-
-.extern OPENSSL_ia32cap_P
-.globl ecp_nistz_avx2_eligible
-.type ecp_nistz_avx2_eligible,\@abi-omnipotent
-.align 32
-ecp_nistz_avx2_eligible:
- mov OPENSSL_ia32cap_P+8(%rip),%eax
- shr \$5,%eax
- and \$1,%eax
- ret
-.size ecp_nistz_avx2_eligible,.-ecp_nistz_avx2_eligible
-___
-}
-}} else {{ # assembler is too old
-$code.=<<___;
-.text
-
-.globl ecp_nistz256_avx2_transpose_convert
-.globl ecp_nistz256_avx2_convert_transpose_back
-.globl ecp_nistz256_avx2_point_add_affine_x4
-.globl ecp_nistz256_avx2_point_add_affines_x4
-.globl ecp_nistz256_avx2_to_mont
-.globl ecp_nistz256_avx2_from_mont
-.globl ecp_nistz256_avx2_set1
-.globl ecp_nistz256_avx2_multi_gather_w7
-.type ecp_nistz256_avx2_multi_gather_w7,\@abi-omnipotent
-ecp_nistz256_avx2_transpose_convert:
-ecp_nistz256_avx2_convert_transpose_back:
-ecp_nistz256_avx2_point_add_affine_x4:
-ecp_nistz256_avx2_point_add_affines_x4:
-ecp_nistz256_avx2_to_mont:
-ecp_nistz256_avx2_from_mont:
-ecp_nistz256_avx2_set1:
-ecp_nistz256_avx2_multi_gather_w7:
- .byte 0x0f,0x0b # ud2
- ret
-.size ecp_nistz256_avx2_multi_gather_w7,.-ecp_nistz256_avx2_multi_gather_w7
-
-.globl ecp_nistz_avx2_eligible
-.type ecp_nistz_avx2_eligible,\@abi-omnipotent
-ecp_nistz_avx2_eligible:
- xor %eax,%eax
- ret
-.size ecp_nistz_avx2_eligible,.-ecp_nistz_avx2_eligible
-___
-}}
-
-foreach (split("\n",$code)) {
- s/\`([^\`]*)\`/eval($1)/geo;
-
- print $_,"\n";
-}
-
-close STDOUT or die "error closing STDOUT: $!";
diff --git a/crypto/openssl/crypto/ec/ec_ameth.c b/crypto/openssl/crypto/ec/ec_ameth.c
index 221038373921..5098bd7a6602 100644
--- a/crypto/openssl/crypto/ec/ec_ameth.c
+++ b/crypto/openssl/crypto/ec/ec_ameth.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2006-2019 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -23,7 +23,7 @@ static int ecdh_cms_decrypt(CMS_RecipientInfo *ri);
static int ecdh_cms_encrypt(CMS_RecipientInfo *ri);
#endif
-static int eckey_param2type(int *pptype, void **ppval, EC_KEY *ec_key)
+static int eckey_param2type(int *pptype, void **ppval, const EC_KEY *ec_key)
{
const EC_GROUP *group;
int nid;
@@ -35,7 +35,14 @@ static int eckey_param2type(int *pptype, void **ppval, EC_KEY *ec_key)
&& (nid = EC_GROUP_get_curve_name(group)))
/* we have a 'named curve' => just set the OID */
{
- *ppval = OBJ_nid2obj(nid);
+ ASN1_OBJECT *asn1obj = OBJ_nid2obj(nid);
+
+ if (asn1obj == NULL || OBJ_length(asn1obj) == 0) {
+ ASN1_OBJECT_free(asn1obj);
+ ECerr(EC_F_ECKEY_PARAM2TYPE, EC_R_MISSING_OID);
+ return 0;
+ }
+ *ppval = asn1obj;
*pptype = V_ASN1_OBJECT;
} else { /* explicit parameters */
@@ -43,7 +50,17 @@ static int eckey_param2type(int *pptype, void **ppval, EC_KEY *ec_key)
pstr = ASN1_STRING_new();
if (pstr == NULL)
return 0;
- pstr->length = i2d_ECParameters(ec_key, &pstr->data);
+
+ /*
+ * The cast in the following line is intentional as the
+ * `i2d_ECParameters` signature can't be constified (see discussion at
+ * https://github.com/openssl/openssl/pull/9347 where related and
+ * required constification backports were rejected).
+ *
+ * This cast should be safe anyway, because we can expect
+ * `i2d_ECParameters()` to treat the first argument as if it was const.
+ */
+ pstr->length = i2d_ECParameters((EC_KEY *)ec_key, &pstr->data);
if (pstr->length <= 0) {
ASN1_STRING_free(pstr);
ECerr(EC_F_ECKEY_PARAM2TYPE, ERR_R_EC_LIB);
@@ -57,7 +74,7 @@ static int eckey_param2type(int *pptype, void **ppval, EC_KEY *ec_key)
static int eckey_pub_encode(X509_PUBKEY *pk, const EVP_PKEY *pkey)
{
- EC_KEY *ec_key = pkey->pkey.ec;
+ const EC_KEY *ec_key = pkey->pkey.ec;
void *pval = NULL;
int ptype;
unsigned char *penc = NULL, *p;
diff --git a/crypto/openssl/crypto/ec/ec_asn1.c b/crypto/openssl/crypto/ec/ec_asn1.c
index 006f9a5dea17..7b7c75ce8443 100644
--- a/crypto/openssl/crypto/ec/ec_asn1.c
+++ b/crypto/openssl/crypto/ec/ec_asn1.c
@@ -137,6 +137,12 @@ struct ec_parameters_st {
ASN1_INTEGER *cofactor;
} /* ECPARAMETERS */ ;
+typedef enum {
+ ECPKPARAMETERS_TYPE_NAMED = 0,
+ ECPKPARAMETERS_TYPE_EXPLICIT,
+ ECPKPARAMETERS_TYPE_IMPLICIT
+} ecpk_parameters_type_t;
+
struct ecpk_parameters_st {
int type;
union {
@@ -535,9 +541,10 @@ ECPKPARAMETERS *EC_GROUP_get_ecpkparameters(const EC_GROUP *group,
return NULL;
}
} else {
- if (ret->type == 0)
+ if (ret->type == ECPKPARAMETERS_TYPE_NAMED)
ASN1_OBJECT_free(ret->value.named_curve);
- else if (ret->type == 1 && ret->value.parameters)
+ else if (ret->type == ECPKPARAMETERS_TYPE_EXPLICIT
+ && ret->value.parameters != NULL)
ECPARAMETERS_free(ret->value.parameters);
}
@@ -547,15 +554,22 @@ ECPKPARAMETERS *EC_GROUP_get_ecpkparameters(const EC_GROUP *group,
*/
tmp = EC_GROUP_get_curve_name(group);
if (tmp) {
- ret->type = 0;
- if ((ret->value.named_curve = OBJ_nid2obj(tmp)) == NULL)
+ ASN1_OBJECT *asn1obj = OBJ_nid2obj(tmp);
+
+ if (asn1obj == NULL || OBJ_length(asn1obj) == 0) {
+ ASN1_OBJECT_free(asn1obj);
+ ECerr(EC_F_EC_GROUP_GET_ECPKPARAMETERS, EC_R_MISSING_OID);
ok = 0;
+ } else {
+ ret->type = ECPKPARAMETERS_TYPE_NAMED;
+ ret->value.named_curve = asn1obj;
+ }
} else
/* we don't know the nid => ERROR */
ok = 0;
} else {
/* use the ECPARAMETERS structure */
- ret->type = 1;
+ ret->type = ECPKPARAMETERS_TYPE_EXPLICIT;
if ((ret->value.parameters =
EC_GROUP_get_ecparameters(group, NULL)) == NULL)
ok = 0;
@@ -894,7 +908,8 @@ EC_GROUP *EC_GROUP_new_from_ecpkparameters(const ECPKPARAMETERS *params)
return NULL;
}
- if (params->type == 0) { /* the curve is given by an OID */
+ if (params->type == ECPKPARAMETERS_TYPE_NAMED) {
+ /* the curve is given by an OID */
tmp = OBJ_obj2nid(params->value.named_curve);
if ((ret = EC_GROUP_new_by_curve_name(tmp)) == NULL) {
ECerr(EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS,
@@ -902,15 +917,16 @@ EC_GROUP *EC_GROUP_new_from_ecpkparameters(const ECPKPARAMETERS *params)
return NULL;
}
EC_GROUP_set_asn1_flag(ret, OPENSSL_EC_NAMED_CURVE);
- } else if (params->type == 1) { /* the parameters are given by a
- * ECPARAMETERS structure */
+ } else if (params->type == ECPKPARAMETERS_TYPE_EXPLICIT) {
+ /* the parameters are given by an ECPARAMETERS structure */
ret = EC_GROUP_new_from_ecparameters(params->value.parameters);
if (!ret) {
ECerr(EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS, ERR_R_EC_LIB);
return NULL;
}
EC_GROUP_set_asn1_flag(ret, OPENSSL_EC_EXPLICIT_CURVE);
- } else if (params->type == 2) { /* implicitlyCA */
+ } else if (params->type == ECPKPARAMETERS_TYPE_IMPLICIT) {
+ /* implicit parameters inherited from CA - unsupported */
return NULL;
} else {
ECerr(EC_F_EC_GROUP_NEW_FROM_ECPKPARAMETERS, EC_R_ASN1_ERROR);
@@ -940,6 +956,9 @@ EC_GROUP *d2i_ECPKParameters(EC_GROUP **a, const unsigned char **in, long len)
return NULL;
}
+ if (params->type == ECPKPARAMETERS_TYPE_EXPLICIT)
+ group->decoded_from_explicit_params = 1;
+
if (a) {
EC_GROUP_free(*a);
*a = group;
@@ -991,6 +1010,9 @@ EC_KEY *d2i_ECPrivateKey(EC_KEY **a, const unsigned char **in, long len)
if (priv_key->parameters) {
EC_GROUP_free(ret->group);
ret->group = EC_GROUP_new_from_ecpkparameters(priv_key->parameters);
+ if (ret->group != NULL
+ && priv_key->parameters->type == ECPKPARAMETERS_TYPE_EXPLICIT)
+ ret->group->decoded_from_explicit_params = 1;
}
if (ret->group == NULL) {
diff --git a/crypto/openssl/crypto/ec/ec_err.c b/crypto/openssl/crypto/ec/ec_err.c
index ce3493823218..bfe74226503e 100644
--- a/crypto/openssl/crypto/ec/ec_err.c
+++ b/crypto/openssl/crypto/ec/ec_err.c
@@ -1,6 +1,6 @@
/*
* Generated by util/mkerr.pl DO NOT EDIT
- * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -341,6 +341,7 @@ static const ERR_STRING_DATA EC_str_reasons[] = {
{ERR_PACK(ERR_LIB_EC, 0, EC_R_LADDER_POST_FAILURE), "ladder post failure"},
{ERR_PACK(ERR_LIB_EC, 0, EC_R_LADDER_PRE_FAILURE), "ladder pre failure"},
{ERR_PACK(ERR_LIB_EC, 0, EC_R_LADDER_STEP_FAILURE), "ladder step failure"},
+ {ERR_PACK(ERR_LIB_EC, 0, EC_R_MISSING_OID), "missing OID"},
{ERR_PACK(ERR_LIB_EC, 0, EC_R_MISSING_PARAMETERS), "missing parameters"},
{ERR_PACK(ERR_LIB_EC, 0, EC_R_MISSING_PRIVATE_KEY), "missing private key"},
{ERR_PACK(ERR_LIB_EC, 0, EC_R_NEED_NEW_SETUP_VALUES),
diff --git a/crypto/openssl/crypto/ec/ec_key.c b/crypto/openssl/crypto/ec/ec_key.c
index 08aaac5d8a6f..23efbd015ca4 100644
--- a/crypto/openssl/crypto/ec/ec_key.c
+++ b/crypto/openssl/crypto/ec/ec_key.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2018 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2002-2020 The OpenSSL Project Authors. All Rights Reserved.
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
*
* Licensed under the OpenSSL license (the "License"). You may not use
@@ -14,6 +14,7 @@
#include "internal/refcount.h"
#include <openssl/err.h>
#include <openssl/engine.h>
+#include "crypto/bn.h"
EC_KEY *EC_KEY_new(void)
{
@@ -416,17 +417,86 @@ const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key)
int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *priv_key)
{
+ int fixed_top;
+ const BIGNUM *order = NULL;
+ BIGNUM *tmp_key = NULL;
+
if (key->group == NULL || key->group->meth == NULL)
return 0;
+
+ /*
+ * Not only should key->group be set, but it should also be in a valid
+ * fully initialized state.
+ *
+ * Specifically, to operate in constant time, we need that the group order
+ * is set, as we use its length as the fixed public size of any scalar used
+ * as an EC private key.
+ */
+ order = EC_GROUP_get0_order(key->group);
+ if (order == NULL || BN_is_zero(order))
+ return 0; /* This should never happen */
+
if (key->group->meth->set_private != NULL
&& key->group->meth->set_private(key, priv_key) == 0)
return 0;
if (key->meth->set_private != NULL
&& key->meth->set_private(key, priv_key) == 0)
return 0;
+
+ /*
+ * We should never leak the bit length of the secret scalar in the key,
+ * so we always set the `BN_FLG_CONSTTIME` flag on the internal `BIGNUM`
+ * holding the secret scalar.
+ *
+ * This is important also because `BN_dup()` (and `BN_copy()`) do not
+ * propagate the `BN_FLG_CONSTTIME` flag from the source `BIGNUM`, and
+ * this brings an extra risk of inadvertently losing the flag, even when
+ * the caller specifically set it.
+ *
+ * The propagation has been turned on and off a few times in the past
+ * years because in some conditions has shown unintended consequences in
+ * some code paths, so at the moment we can't fix this in the BN layer.
+ *
+ * In `EC_KEY_set_private_key()` we can work around the propagation by
+ * manually setting the flag after `BN_dup()` as we know for sure that
+ * inside the EC module the `BN_FLG_CONSTTIME` is always treated
+ * correctly and should not generate unintended consequences.
+ *
+ * Setting the BN_FLG_CONSTTIME flag alone is never enough, we also have
+ * to preallocate the BIGNUM internal buffer to a fixed public size big
+ * enough that operations performed during the processing never trigger
+ * a realloc which would leak the size of the scalar through memory
+ * accesses.
+ *
+ * Fixed Length
+ * ------------
+ *
+ * The order of the large prime subgroup of the curve is our choice for
+ * a fixed public size, as that is generally the upper bound for
+ * generating a private key in EC cryptosystems and should fit all valid
+ * secret scalars.
+ *
+ * For preallocating the BIGNUM storage we look at the number of "words"
+ * required for the internal representation of the order, and we
+ * preallocate 2 extra "words" in case any of the subsequent processing
+ * might temporarily overflow the order length.
+ */
+ tmp_key = BN_dup(priv_key);
+ if (tmp_key == NULL)
+ return 0;
+
+ BN_set_flags(tmp_key, BN_FLG_CONSTTIME);
+
+ fixed_top = bn_get_top(order) + 2;
+ if (bn_wexpand(tmp_key, fixed_top) == NULL) {
+ BN_clear_free(tmp_key);
+ return 0;
+ }
+
BN_clear_free(key->priv_key);
- key->priv_key = BN_dup(priv_key);
- return (key->priv_key == NULL) ? 0 : 1;
+ key->priv_key = tmp_key;
+
+ return 1;
}
const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key)
@@ -494,6 +564,13 @@ void EC_KEY_clear_flags(EC_KEY *key, int flags)
key->flags &= ~flags;
}
+int EC_KEY_decoded_from_explicit_params(const EC_KEY *key)
+{
+ if (key == NULL || key->group == NULL)
+ return -1;
+ return key->group->decoded_from_explicit_params;
+}
+
size_t EC_KEY_key2buf(const EC_KEY *key, point_conversion_form_t form,
unsigned char **pbuf, BN_CTX *ctx)
{
diff --git a/crypto/openssl/crypto/ec/ec_lib.c b/crypto/openssl/crypto/ec/ec_lib.c
index 6832383cad51..08db89fceeb5 100644
--- a/crypto/openssl/crypto/ec/ec_lib.c
+++ b/crypto/openssl/crypto/ec/ec_lib.c
@@ -211,6 +211,7 @@ int EC_GROUP_copy(EC_GROUP *dest, const EC_GROUP *src)
dest->asn1_flag = src->asn1_flag;
dest->asn1_form = src->asn1_form;
+ dest->decoded_from_explicit_params = src->decoded_from_explicit_params;
if (src->seed) {
OPENSSL_free(dest->seed);
diff --git a/crypto/openssl/crypto/ec/ec_local.h b/crypto/openssl/crypto/ec/ec_local.h
index e656fbd5e775..64725a9c92f4 100644
--- a/crypto/openssl/crypto/ec/ec_local.h
+++ b/crypto/openssl/crypto/ec/ec_local.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2001-2019 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved.
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved
*
* Licensed under the OpenSSL license (the "License"). You may not use
@@ -209,6 +209,8 @@ struct ec_group_st {
BIGNUM *order, *cofactor;
int curve_name; /* optional NID for named curve */
int asn1_flag; /* flag to control the asn1 encoding */
+ int decoded_from_explicit_params; /* set if decoded from explicit
+ * curve parameters encoding */
point_conversion_form_t asn1_form;
unsigned char *seed; /* optional seed for parameters (appears in
* ASN1) */
diff --git a/crypto/openssl/crypto/ec/ecp_nistp224.c b/crypto/openssl/crypto/ec/ecp_nistp224.c
index 9a9ced8f1343..6f7d66c8bea4 100644
--- a/crypto/openssl/crypto/ec/ecp_nistp224.c
+++ b/crypto/openssl/crypto/ec/ecp_nistp224.c
@@ -72,6 +72,7 @@ typedef uint64_t u64;
*/
typedef uint64_t limb;
+typedef uint64_t limb_aX __attribute((__aligned__(1)));
typedef uint128_t widelimb;
typedef limb felem[4];
@@ -307,10 +308,10 @@ const EC_METHOD *EC_GFp_nistp224_method(void)
*/
static void bin28_to_felem(felem out, const u8 in[28])
{
- out[0] = *((const uint64_t *)(in)) & 0x00ffffffffffffff;
- out[1] = (*((const uint64_t *)(in + 7))) & 0x00ffffffffffffff;
- out[2] = (*((const uint64_t *)(in + 14))) & 0x00ffffffffffffff;
- out[3] = (*((const uint64_t *)(in+20))) >> 8;
+ out[0] = *((const limb *)(in)) & 0x00ffffffffffffff;
+ out[1] = (*((const limb_aX *)(in + 7))) & 0x00ffffffffffffff;
+ out[2] = (*((const limb_aX *)(in + 14))) & 0x00ffffffffffffff;
+ out[3] = (*((const limb_aX *)(in + 20))) >> 8;
}
static void felem_to_bin28(u8 out[28], const felem in)
diff --git a/crypto/openssl/crypto/ec/ecp_nistp521.c b/crypto/openssl/crypto/ec/ecp_nistp521.c
index 75eeba853679..08b32787293b 100644
--- a/crypto/openssl/crypto/ec/ecp_nistp521.c
+++ b/crypto/openssl/crypto/ec/ecp_nistp521.c
@@ -128,6 +128,7 @@ static const felem_bytearray nistp521_curve_params[5] = {
# define NLIMBS 9
typedef uint64_t limb;
+typedef limb limb_aX __attribute((__aligned__(1)));
typedef limb felem[NLIMBS];
typedef uint128_t largefelem[NLIMBS];
@@ -141,14 +142,14 @@ static const limb bottom58bits = 0x3ffffffffffffff;
static void bin66_to_felem(felem out, const u8 in[66])
{
out[0] = (*((limb *) & in[0])) & bottom58bits;
- out[1] = (*((limb *) & in[7]) >> 2) & bottom58bits;
- out[2] = (*((limb *) & in[14]) >> 4) & bottom58bits;
- out[3] = (*((limb *) & in[21]) >> 6) & bottom58bits;
- out[4] = (*((limb *) & in[29])) & bottom58bits;
- out[5] = (*((limb *) & in[36]) >> 2) & bottom58bits;
- out[6] = (*((limb *) & in[43]) >> 4) & bottom58bits;
- out[7] = (*((limb *) & in[50]) >> 6) & bottom58bits;
- out[8] = (*((limb *) & in[58])) & bottom57bits;
+ out[1] = (*((limb_aX *) & in[7]) >> 2) & bottom58bits;
+ out[2] = (*((limb_aX *) & in[14]) >> 4) & bottom58bits;
+ out[3] = (*((limb_aX *) & in[21]) >> 6) & bottom58bits;
+ out[4] = (*((limb_aX *) & in[29])) & bottom58bits;
+ out[5] = (*((limb_aX *) & in[36]) >> 2) & bottom58bits;
+ out[6] = (*((limb_aX *) & in[43]) >> 4) & bottom58bits;
+ out[7] = (*((limb_aX *) & in[50]) >> 6) & bottom58bits;
+ out[8] = (*((limb_aX *) & in[58])) & bottom57bits;
}
/*
@@ -159,14 +160,14 @@ static void felem_to_bin66(u8 out[66], const felem in)
{
memset(out, 0, 66);
(*((limb *) & out[0])) = in[0];
- (*((limb *) & out[7])) |= in[1] << 2;
- (*((limb *) & out[14])) |= in[2] << 4;
- (*((limb *) & out[21])) |= in[3] << 6;
- (*((limb *) & out[29])) = in[4];
- (*((limb *) & out[36])) |= in[5] << 2;
- (*((limb *) & out[43])) |= in[6] << 4;
- (*((limb *) & out[50])) |= in[7] << 6;
- (*((limb *) & out[58])) = in[8];
+ (*((limb_aX *) & out[7])) |= in[1] << 2;
+ (*((limb_aX *) & out[14])) |= in[2] << 4;
+ (*((limb_aX *) & out[21])) |= in[3] << 6;
+ (*((limb_aX *) & out[29])) = in[4];
+ (*((limb_aX *) & out[36])) |= in[5] << 2;
+ (*((limb_aX *) & out[43])) |= in[6] << 4;
+ (*((limb_aX *) & out[50])) |= in[7] << 6;
+ (*((limb_aX *) & out[58])) = in[8];
}
/* BN_to_felem converts an OpenSSL BIGNUM into an felem */
diff --git a/crypto/openssl/crypto/ec/ecp_nistz256.c b/crypto/openssl/crypto/ec/ecp_nistz256.c
index ba9268138862..5005249b05ea 100644
--- a/crypto/openssl/crypto/ec/ecp_nistz256.c
+++ b/crypto/openssl/crypto/ec/ecp_nistz256.c
@@ -929,207 +929,6 @@ __owur static int ecp_nistz256_mult_precompute(EC_GROUP *group, BN_CTX *ctx)
return ret;
}
-/*
- * Note that by default ECP_NISTZ256_AVX2 is undefined. While it's great
- * code processing 4 points in parallel, corresponding serial operation
- * is several times slower, because it uses 29x29=58-bit multiplication
- * as opposite to 64x64=128-bit in integer-only scalar case. As result
- * it doesn't provide *significant* performance improvement. Note that
- * just defining ECP_NISTZ256_AVX2 is not sufficient to make it work,
- * you'd need to compile even asm/ecp_nistz256-avx.pl module.
- */
-#if defined(ECP_NISTZ256_AVX2)
-# if !(defined(__x86_64) || defined(__x86_64__) || \
- defined(_M_AMD64) || defined(_M_X64)) || \
- !(defined(__GNUC__) || defined(_MSC_VER)) /* this is for ALIGN32 */
-# undef ECP_NISTZ256_AVX2
-# else
-/* Constant time access, loading four values, from four consecutive tables */
-void ecp_nistz256_avx2_multi_gather_w7(void *result, const void *in,
- int index0, int index1, int index2,
- int index3);
-void ecp_nistz256_avx2_transpose_convert(void *RESULTx4, const void *in);
-void ecp_nistz256_avx2_convert_transpose_back(void *result, const void *Ax4);
-void ecp_nistz256_avx2_point_add_affine_x4(void *RESULTx4, const void *Ax4,
- const void *Bx4);
-void ecp_nistz256_avx2_point_add_affines_x4(void *RESULTx4, const void *Ax4,
- const void *Bx4);
-void ecp_nistz256_avx2_to_mont(void *RESULTx4, const void *Ax4);
-void ecp_nistz256_avx2_from_mont(void *RESULTx4, const void *Ax4);
-void ecp_nistz256_avx2_set1(void *RESULTx4);
-int ecp_nistz_avx2_eligible(void);
-
-static void booth_recode_w7(unsigned char *sign,
- unsigned char *digit, unsigned char in)
-{
- unsigned char s, d;
-
- s = ~((in >> 7) - 1);
- d = (1 << 8) - in - 1;
- d = (d & s) | (in & ~s);
- d = (d >> 1) + (d & 1);
-
- *sign = s & 1;
- *digit = d;
-}
-
-/*
- * ecp_nistz256_avx2_mul_g performs multiplication by G, using only the
- * precomputed table. It does 4 affine point additions in parallel,
- * significantly speeding up point multiplication for a fixed value.
- */
-static void ecp_nistz256_avx2_mul_g(P256_POINT *r,
- unsigned char p_str[33],
- const P256_POINT_AFFINE(*preComputedTable)[64])
-{
- const unsigned int window_size = 7;
- const unsigned int mask = (1 << (window_size + 1)) - 1;
- unsigned int wvalue;
- /* Using 4 windows at a time */
- unsigned char sign0, digit0;
- unsigned char sign1, digit1;
- unsigned char sign2, digit2;
- unsigned char sign3, digit3;
- unsigned int idx = 0;
- BN_ULONG tmp[P256_LIMBS];
- int i;
-
- ALIGN32 BN_ULONG aX4[4 * 9 * 3] = { 0 };
- ALIGN32 BN_ULONG bX4[4 * 9 * 2] = { 0 };
- ALIGN32 P256_POINT_AFFINE point_arr[4];
- ALIGN32 P256_POINT res_point_arr[4];
-
- /* Initial four windows */
- wvalue = *((u16 *) & p_str[0]);
- wvalue = (wvalue << 1) & mask;
- idx += window_size;
- booth_recode_w7(&sign0, &digit0, wvalue);
- wvalue = *((u16 *) & p_str[(idx - 1) / 8]);
- wvalue = (wvalue >> ((idx - 1) % 8)) & mask;
- idx += window_size;
- booth_recode_w7(&sign1, &digit1, wvalue);
- wvalue = *((u16 *) & p_str[(idx - 1) / 8]);
- wvalue = (wvalue >> ((idx - 1) % 8)) & mask;
- idx += window_size;
- booth_recode_w7(&sign2, &digit2, wvalue);
- wvalue = *((u16 *) & p_str[(idx - 1) / 8]);
- wvalue = (wvalue >> ((idx - 1) % 8)) & mask;
- idx += window_size;
- booth_recode_w7(&sign3, &digit3, wvalue);
-
- ecp_nistz256_avx2_multi_gather_w7(point_arr, preComputedTable[0],
- digit0, digit1, digit2, digit3);
-
- ecp_nistz256_neg(tmp, point_arr[0].Y);
- copy_conditional(point_arr[0].Y, tmp, sign0);
- ecp_nistz256_neg(tmp, point_arr[1].Y);
- copy_conditional(point_arr[1].Y, tmp, sign1);
- ecp_nistz256_neg(tmp, point_arr[2].Y);
- copy_conditional(point_arr[2].Y, tmp, sign2);
- ecp_nistz256_neg(tmp, point_arr[3].Y);
- copy_conditional(point_arr[3].Y, tmp, sign3);
-
- ecp_nistz256_avx2_transpose_convert(aX4, point_arr);
- ecp_nistz256_avx2_to_mont(aX4, aX4);
- ecp_nistz256_avx2_to_mont(&aX4[4 * 9], &aX4[4 * 9]);
- ecp_nistz256_avx2_set1(&aX4[4 * 9 * 2]);
-
- wvalue = *((u16 *) & p_str[(idx - 1) / 8]);
- wvalue = (wvalue >> ((idx - 1) % 8)) & mask;
- idx += window_size;
- booth_recode_w7(&sign0, &digit0, wvalue);
- wvalue = *((u16 *) & p_str[(idx - 1) / 8]);
- wvalue = (wvalue >> ((idx - 1) % 8)) & mask;
- idx += window_size;
- booth_recode_w7(&sign1, &digit1, wvalue);
- wvalue = *((u16 *) & p_str[(idx - 1) / 8]);
- wvalue = (wvalue >> ((idx - 1) % 8)) & mask;
- idx += window_size;
- booth_recode_w7(&sign2, &digit2, wvalue);
- wvalue = *((u16 *) & p_str[(idx - 1) / 8]);
- wvalue = (wvalue >> ((idx - 1) % 8)) & mask;
- idx += window_size;
- booth_recode_w7(&sign3, &digit3, wvalue);
-
- ecp_nistz256_avx2_multi_gather_w7(point_arr, preComputedTable[4 * 1],
- digit0, digit1, digit2, digit3);
-
- ecp_nistz256_neg(tmp, point_arr[0].Y);
- copy_conditional(point_arr[0].Y, tmp, sign0);
- ecp_nistz256_neg(tmp, point_arr[1].Y);
- copy_conditional(point_arr[1].Y, tmp, sign1);
- ecp_nistz256_neg(tmp, point_arr[2].Y);
- copy_conditional(point_arr[2].Y, tmp, sign2);
- ecp_nistz256_neg(tmp, point_arr[3].Y);
- copy_conditional(point_arr[3].Y, tmp, sign3);
-
- ecp_nistz256_avx2_transpose_convert(bX4, point_arr);
- ecp_nistz256_avx2_to_mont(bX4, bX4);
- ecp_nistz256_avx2_to_mont(&bX4[4 * 9], &bX4[4 * 9]);
- /* Optimized when both inputs are affine */
- ecp_nistz256_avx2_point_add_affines_x4(aX4, aX4, bX4);
-
- for (i = 2; i < 9; i++) {
- wvalue = *((u16 *) & p_str[(idx - 1) / 8]);
- wvalue = (wvalue >> ((idx - 1) % 8)) & mask;
- idx += window_size;
- booth_recode_w7(&sign0, &digit0, wvalue);
- wvalue = *((u16 *) & p_str[(idx - 1) / 8]);
- wvalue = (wvalue >> ((idx - 1) % 8)) & mask;
- idx += window_size;
- booth_recode_w7(&sign1, &digit1, wvalue);
- wvalue = *((u16 *) & p_str[(idx - 1) / 8]);
- wvalue = (wvalue >> ((idx - 1) % 8)) & mask;
- idx += window_size;
- booth_recode_w7(&sign2, &digit2, wvalue);
- wvalue = *((u16 *) & p_str[(idx - 1) / 8]);
- wvalue = (wvalue >> ((idx - 1) % 8)) & mask;
- idx += window_size;
- booth_recode_w7(&sign3, &digit3, wvalue);
-
- ecp_nistz256_avx2_multi_gather_w7(point_arr,
- preComputedTable[4 * i],
- digit0, digit1, digit2, digit3);
-
- ecp_nistz256_neg(tmp, point_arr[0].Y);
- copy_conditional(point_arr[0].Y, tmp, sign0);
- ecp_nistz256_neg(tmp, point_arr[1].Y);
- copy_conditional(point_arr[1].Y, tmp, sign1);
- ecp_nistz256_neg(tmp, point_arr[2].Y);
- copy_conditional(point_arr[2].Y, tmp, sign2);
- ecp_nistz256_neg(tmp, point_arr[3].Y);
- copy_conditional(point_arr[3].Y, tmp, sign3);
-
- ecp_nistz256_avx2_transpose_convert(bX4, point_arr);
- ecp_nistz256_avx2_to_mont(bX4, bX4);
- ecp_nistz256_avx2_to_mont(&bX4[4 * 9], &bX4[4 * 9]);
-
- ecp_nistz256_avx2_point_add_affine_x4(aX4, aX4, bX4);
- }
-
- ecp_nistz256_avx2_from_mont(&aX4[4 * 9 * 0], &aX4[4 * 9 * 0]);
- ecp_nistz256_avx2_from_mont(&aX4[4 * 9 * 1], &aX4[4 * 9 * 1]);
- ecp_nistz256_avx2_from_mont(&aX4[4 * 9 * 2], &aX4[4 * 9 * 2]);
-
- ecp_nistz256_avx2_convert_transpose_back(res_point_arr, aX4);
- /* Last window is performed serially */
- wvalue = *((u16 *) & p_str[(idx - 1) / 8]);
- wvalue = (wvalue >> ((idx - 1) % 8)) & mask;
- booth_recode_w7(&sign0, &digit0, wvalue);
- ecp_nistz256_gather_w7((P256_POINT_AFFINE *)r,
- preComputedTable[36], digit0);
- ecp_nistz256_neg(tmp, r->Y);
- copy_conditional(r->Y, tmp, sign0);
- memcpy(r->Z, ONE, sizeof(ONE));
- /* Sum the four windows */
- ecp_nistz256_point_add(r, r, &res_point_arr[0]);
- ecp_nistz256_point_add(r, r, &res_point_arr[1]);
- ecp_nistz256_point_add(r, r, &res_point_arr[2]);
- ecp_nistz256_point_add(r, r, &res_point_arr[3]);
-}
-# endif
-#endif
-
__owur static int ecp_nistz256_set_from_affine(EC_POINT *out, const EC_GROUP *group,
const P256_POINT_AFFINE *in,
BN_CTX *ctx)
@@ -1219,6 +1018,8 @@ __owur static int ecp_nistz256_points_mul(const EC_GROUP *group,
}
if (preComputedTable) {
+ BN_ULONG infty;
+
if ((BN_num_bits(scalar) > 256)
|| BN_is_negative(scalar)) {
if ((tmp_scalar = BN_CTX_get(ctx)) == NULL)
@@ -1250,67 +1051,58 @@ __owur static int ecp_nistz256_points_mul(const EC_GROUP *group,
for (; i < 33; i++)
p_str[i] = 0;
-#if defined(ECP_NISTZ256_AVX2)
- if (ecp_nistz_avx2_eligible()) {
- ecp_nistz256_avx2_mul_g(&p.p, p_str, preComputedTable);
- } else
-#endif
- {
- BN_ULONG infty;
+ /* First window */
+ wvalue = (p_str[0] << 1) & mask;
+ idx += window_size;
- /* First window */
- wvalue = (p_str[0] << 1) & mask;
- idx += window_size;
+ wvalue = _booth_recode_w7(wvalue);
- wvalue = _booth_recode_w7(wvalue);
+ ecp_nistz256_gather_w7(&p.a, preComputedTable[0],
+ wvalue >> 1);
- ecp_nistz256_gather_w7(&p.a, preComputedTable[0],
- wvalue >> 1);
-
- ecp_nistz256_neg(p.p.Z, p.p.Y);
- copy_conditional(p.p.Y, p.p.Z, wvalue & 1);
-
- /*
- * Since affine infinity is encoded as (0,0) and
- * Jacobian ias (,,0), we need to harmonize them
- * by assigning "one" or zero to Z.
- */
- infty = (p.p.X[0] | p.p.X[1] | p.p.X[2] | p.p.X[3] |
- p.p.Y[0] | p.p.Y[1] | p.p.Y[2] | p.p.Y[3]);
- if (P256_LIMBS == 8)
- infty |= (p.p.X[4] | p.p.X[5] | p.p.X[6] | p.p.X[7] |
- p.p.Y[4] | p.p.Y[5] | p.p.Y[6] | p.p.Y[7]);
-
- infty = 0 - is_zero(infty);
- infty = ~infty;
-
- p.p.Z[0] = ONE[0] & infty;
- p.p.Z[1] = ONE[1] & infty;
- p.p.Z[2] = ONE[2] & infty;
- p.p.Z[3] = ONE[3] & infty;
- if (P256_LIMBS == 8) {
- p.p.Z[4] = ONE[4] & infty;
- p.p.Z[5] = ONE[5] & infty;
- p.p.Z[6] = ONE[6] & infty;
- p.p.Z[7] = ONE[7] & infty;
- }
+ ecp_nistz256_neg(p.p.Z, p.p.Y);
+ copy_conditional(p.p.Y, p.p.Z, wvalue & 1);
- for (i = 1; i < 37; i++) {
- unsigned int off = (idx - 1) / 8;
- wvalue = p_str[off] | p_str[off + 1] << 8;
- wvalue = (wvalue >> ((idx - 1) % 8)) & mask;
- idx += window_size;
+ /*
+ * Since affine infinity is encoded as (0,0) and
+ * Jacobian is (,,0), we need to harmonize them
+ * by assigning "one" or zero to Z.
+ */
+ infty = (p.p.X[0] | p.p.X[1] | p.p.X[2] | p.p.X[3] |
+ p.p.Y[0] | p.p.Y[1] | p.p.Y[2] | p.p.Y[3]);
+ if (P256_LIMBS == 8)
+ infty |= (p.p.X[4] | p.p.X[5] | p.p.X[6] | p.p.X[7] |
+ p.p.Y[4] | p.p.Y[5] | p.p.Y[6] | p.p.Y[7]);
+
+ infty = 0 - is_zero(infty);
+ infty = ~infty;
+
+ p.p.Z[0] = ONE[0] & infty;
+ p.p.Z[1] = ONE[1] & infty;
+ p.p.Z[2] = ONE[2] & infty;
+ p.p.Z[3] = ONE[3] & infty;
+ if (P256_LIMBS == 8) {
+ p.p.Z[4] = ONE[4] & infty;
+ p.p.Z[5] = ONE[5] & infty;
+ p.p.Z[6] = ONE[6] & infty;
+ p.p.Z[7] = ONE[7] & infty;
+ }
- wvalue = _booth_recode_w7(wvalue);
+ for (i = 1; i < 37; i++) {
+ unsigned int off = (idx - 1) / 8;
+ wvalue = p_str[off] | p_str[off + 1] << 8;
+ wvalue = (wvalue >> ((idx - 1) % 8)) & mask;
+ idx += window_size;
- ecp_nistz256_gather_w7(&t.a,
- preComputedTable[i], wvalue >> 1);
+ wvalue = _booth_recode_w7(wvalue);
- ecp_nistz256_neg(t.p.Z, t.a.Y);
- copy_conditional(t.a.Y, t.p.Z, wvalue & 1);
+ ecp_nistz256_gather_w7(&t.a,
+ preComputedTable[i], wvalue >> 1);
- ecp_nistz256_point_add_affine(&p.p, &p.p, &t.a);
- }
+ ecp_nistz256_neg(t.p.Z, t.a.Y);
+ copy_conditional(t.a.Y, t.p.Z, wvalue & 1);
+
+ ecp_nistz256_point_add_affine(&p.p, &p.p, &t.a);
}
} else {
p_is_infinity = 1;
diff --git a/crypto/openssl/crypto/engine/eng_lib.c b/crypto/openssl/crypto/engine/eng_lib.c
index b851ff695756..5bd584c5999a 100644
--- a/crypto/openssl/crypto/engine/eng_lib.c
+++ b/crypto/openssl/crypto/engine/eng_lib.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2001-2019 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -171,6 +171,7 @@ void engine_cleanup_int(void)
cleanup_stack = NULL;
}
CRYPTO_THREAD_lock_free(global_engine_lock);
+ global_engine_lock = NULL;
}
/* Now the "ex_data" support */
diff --git a/crypto/openssl/crypto/err/openssl.txt b/crypto/openssl/crypto/err/openssl.txt
index 35512f9caf96..0b5873ebbcb7 100644
--- a/crypto/openssl/crypto/err/openssl.txt
+++ b/crypto/openssl/crypto/err/openssl.txt
@@ -934,6 +934,8 @@ PEM_F_PEM_READ_PRIVATEKEY:124:PEM_read_PrivateKey
PEM_F_PEM_SIGNFINAL:112:PEM_SignFinal
PEM_F_PEM_WRITE:113:PEM_write
PEM_F_PEM_WRITE_BIO:114:PEM_write_bio
+PEM_F_PEM_WRITE_BIO_PRIVATEKEY_TRADITIONAL:147:\
+ PEM_write_bio_PrivateKey_traditional
PEM_F_PEM_WRITE_PRIVATEKEY:139:PEM_write_PrivateKey
PEM_F_PEM_X509_INFO_READ:115:PEM_X509_INFO_read
PEM_F_PEM_X509_INFO_READ_BIO:116:PEM_X509_INFO_read_bio
@@ -1742,6 +1744,7 @@ X509_F_X509_NAME_PRINT:117:X509_NAME_print
X509_F_X509_OBJECT_NEW:150:X509_OBJECT_new
X509_F_X509_PRINT_EX_FP:118:X509_print_ex_fp
X509_F_X509_PUBKEY_DECODE:148:x509_pubkey_decode
+X509_F_X509_PUBKEY_GET:161:X509_PUBKEY_get
X509_F_X509_PUBKEY_GET0:119:X509_PUBKEY_get0
X509_F_X509_PUBKEY_SET:120:X509_PUBKEY_set
X509_F_X509_REQ_CHECK_PRIVATE_KEY:144:X509_REQ_check_private_key
@@ -2164,6 +2167,7 @@ EC_R_KEYS_NOT_SET:140:keys not set
EC_R_LADDER_POST_FAILURE:136:ladder post failure
EC_R_LADDER_PRE_FAILURE:153:ladder pre failure
EC_R_LADDER_STEP_FAILURE:162:ladder step failure
+EC_R_MISSING_OID:167:missing OID
EC_R_MISSING_PARAMETERS:124:missing parameters
EC_R_MISSING_PRIVATE_KEY:125:missing private key
EC_R_NEED_NEW_SETUP_VALUES:157:need new setup values
@@ -2398,6 +2402,7 @@ PEM_R_UNEXPECTED_DEK_IV:130:unexpected dek iv
PEM_R_UNSUPPORTED_CIPHER:113:unsupported cipher
PEM_R_UNSUPPORTED_ENCRYPTION:114:unsupported encryption
PEM_R_UNSUPPORTED_KEY_COMPONENTS:126:unsupported key components
+PEM_R_UNSUPPORTED_PUBLIC_KEY_TYPE:110:unsupported public key type
PKCS12_R_CANT_PACK_STRUCTURE:100:cant pack structure
PKCS12_R_CONTENT_TYPE_NOT_DATA:121:content type not data
PKCS12_R_DECODE_ERROR:101:decode error
diff --git a/crypto/openssl/crypto/evp/e_aes.c b/crypto/openssl/crypto/evp/e_aes.c
index a1b7d50bbff8..405ddbf9bf09 100644
--- a/crypto/openssl/crypto/evp/e_aes.c
+++ b/crypto/openssl/crypto/evp/e_aes.c
@@ -130,11 +130,6 @@ void bsaes_xts_decrypt(const unsigned char *inp, unsigned char *out,
size_t len, const AES_KEY *key1,
const AES_KEY *key2, const unsigned char iv[16]);
#endif
-#if !defined(AES_ASM) && !defined(AES_CTR_ASM) \
- && defined(OPENSSL_AES_CONST_TIME) \
- && !defined(OPENSSL_SMALL_FOOTPRINT)
-# define AES_CTR_ASM
-#endif
#ifdef AES_CTR_ASM
void AES_ctr32_encrypt(const unsigned char *in, unsigned char *out,
size_t blocks, const AES_KEY *key,
diff --git a/crypto/openssl/crypto/evp/encode.c b/crypto/openssl/crypto/evp/encode.c
index 9307ff046424..85926434c300 100644
--- a/crypto/openssl/crypto/evp/encode.c
+++ b/crypto/openssl/crypto/evp/encode.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -423,7 +423,7 @@ static int evp_decodeblock_int(EVP_ENCODE_CTX *ctx, unsigned char *t,
table = data_ascii2bin;
/* trim white space from the start of the line. */
- while ((conv_ascii2bin(*f, table) == B64_WS) && (n > 0)) {
+ while ((n > 0) && (conv_ascii2bin(*f, table) == B64_WS)) {
f++;
n--;
}
diff --git a/crypto/openssl/crypto/mem_sec.c b/crypto/openssl/crypto/mem_sec.c
index 9e0f6702f406..b5f959ba15d5 100644
--- a/crypto/openssl/crypto/mem_sec.c
+++ b/crypto/openssl/crypto/mem_sec.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2015-2020 The OpenSSL Project Authors. All Rights Reserved.
* Copyright 2004-2014, Akamai Technologies. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
@@ -502,7 +502,7 @@ static void sh_done(void)
OPENSSL_free(sh.freelist);
OPENSSL_free(sh.bittable);
OPENSSL_free(sh.bitmalloc);
- if (sh.map_result != NULL && sh.map_size)
+ if (sh.map_result != MAP_FAILED && sh.map_size)
munmap(sh.map_result, sh.map_size);
memset(&sh, 0, sizeof(sh));
}
diff --git a/crypto/openssl/crypto/modes/cbc128.c b/crypto/openssl/crypto/modes/cbc128.c
index fc7e0b60510b..c85e37c6a546 100644
--- a/crypto/openssl/crypto/modes/cbc128.c
+++ b/crypto/openssl/crypto/modes/cbc128.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2008-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -15,6 +15,12 @@
# define STRICT_ALIGNMENT 0
#endif
+#if defined(__GNUC__) && !STRICT_ALIGNMENT
+typedef size_t size_t_aX __attribute((__aligned__(1)));
+#else
+typedef size_t size_t_aX;
+#endif
+
void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out,
size_t len, const void *key,
unsigned char ivec[16], block128_f block)
@@ -40,8 +46,8 @@ void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out,
} else {
while (len >= 16) {
for (n = 0; n < 16; n += sizeof(size_t))
- *(size_t *)(out + n) =
- *(size_t *)(in + n) ^ *(size_t *)(iv + n);
+ *(size_t_aX *)(out + n) =
+ *(size_t_aX *)(in + n) ^ *(size_t_aX *)(iv + n);
(*block) (out, out, key);
iv = out;
len -= 16;
@@ -96,7 +102,8 @@ void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out,
}
} else if (16 % sizeof(size_t) == 0) { /* always true */
while (len >= 16) {
- size_t *out_t = (size_t *)out, *iv_t = (size_t *)iv;
+ size_t_aX *out_t = (size_t_aX *)out;
+ size_t_aX *iv_t = (size_t_aX *)iv;
(*block) (in, out, key);
for (n = 0; n < 16 / sizeof(size_t); n++)
@@ -125,8 +132,10 @@ void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out,
}
} else if (16 % sizeof(size_t) == 0) { /* always true */
while (len >= 16) {
- size_t c, *out_t = (size_t *)out, *ivec_t = (size_t *)ivec;
- const size_t *in_t = (const size_t *)in;
+ size_t c;
+ size_t_aX *out_t = (size_t_aX *)out;
+ size_t_aX *ivec_t = (size_t_aX *)ivec;
+ const size_t_aX *in_t = (const size_t_aX *)in;
(*block) (in, tmp.c, key);
for (n = 0; n < 16 / sizeof(size_t); n++) {
diff --git a/crypto/openssl/crypto/modes/ccm128.c b/crypto/openssl/crypto/modes/ccm128.c
index 424722811c16..655b10350201 100644
--- a/crypto/openssl/crypto/modes/ccm128.c
+++ b/crypto/openssl/crypto/modes/ccm128.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2011-2019 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2011-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -11,6 +11,14 @@
#include "modes_local.h"
#include <string.h>
+#ifndef STRICT_ALIGNMENT
+# ifdef __GNUC__
+typedef u64 u64_a1 __attribute((__aligned__(1)));
+# else
+typedef u64 u64_a1;
+# endif
+#endif
+
/*
* First you setup M and L parameters and pass the key schedule. This is
* called once per session setup...
@@ -170,8 +178,8 @@ int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx,
ctx->cmac.u[0] ^= temp.u[0];
ctx->cmac.u[1] ^= temp.u[1];
#else
- ctx->cmac.u[0] ^= ((u64 *)inp)[0];
- ctx->cmac.u[1] ^= ((u64 *)inp)[1];
+ ctx->cmac.u[0] ^= ((u64_a1 *)inp)[0];
+ ctx->cmac.u[1] ^= ((u64_a1 *)inp)[1];
#endif
(*block) (ctx->cmac.c, ctx->cmac.c, key);
(*block) (ctx->nonce.c, scratch.c, key);
@@ -181,8 +189,8 @@ int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx,
temp.u[1] ^= scratch.u[1];
memcpy(out, temp.c, 16);
#else
- ((u64 *)out)[0] = scratch.u[0] ^ ((u64 *)inp)[0];
- ((u64 *)out)[1] = scratch.u[1] ^ ((u64 *)inp)[1];
+ ((u64_a1 *)out)[0] = scratch.u[0] ^ ((u64_a1 *)inp)[0];
+ ((u64_a1 *)out)[1] = scratch.u[1] ^ ((u64_a1 *)inp)[1];
#endif
inp += 16;
out += 16;
@@ -254,8 +262,10 @@ int CRYPTO_ccm128_decrypt(CCM128_CONTEXT *ctx,
ctx->cmac.u[1] ^= (scratch.u[1] ^= temp.u[1]);
memcpy(out, scratch.c, 16);
#else
- ctx->cmac.u[0] ^= (((u64 *)out)[0] = scratch.u[0] ^ ((u64 *)inp)[0]);
- ctx->cmac.u[1] ^= (((u64 *)out)[1] = scratch.u[1] ^ ((u64 *)inp)[1]);
+ ctx->cmac.u[0] ^= (((u64_a1 *)out)[0]
+ = scratch.u[0] ^ ((u64_a1 *)inp)[0]);
+ ctx->cmac.u[1] ^= (((u64_a1 *)out)[1]
+ = scratch.u[1] ^ ((u64_a1 *)inp)[1]);
#endif
(*block) (ctx->cmac.c, ctx->cmac.c, key);
diff --git a/crypto/openssl/crypto/modes/cfb128.c b/crypto/openssl/crypto/modes/cfb128.c
index b6bec414a966..b2530007b6e4 100644
--- a/crypto/openssl/crypto/modes/cfb128.c
+++ b/crypto/openssl/crypto/modes/cfb128.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2008-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -11,6 +11,12 @@
#include "modes_local.h"
#include <string.h>
+#if defined(__GNUC__) && !defined(STRICT_ALIGNMENT)
+typedef size_t size_t_aX __attribute((__aligned__(1)));
+#else
+typedef size_t size_t_aX;
+#endif
+
/*
* The input and output encrypted as though 128bit cfb mode is being used.
* The extra state information to record how much of the 128bit block we have
@@ -43,8 +49,9 @@ void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out,
while (len >= 16) {
(*block) (ivec, ivec, key);
for (; n < 16; n += sizeof(size_t)) {
- *(size_t *)(out + n) =
- *(size_t *)(ivec + n) ^= *(size_t *)(in + n);
+ *(size_t_aX *)(out + n) =
+ *(size_t_aX *)(ivec + n)
+ ^= *(size_t_aX *)(in + n);
}
len -= 16;
out += 16;
@@ -92,9 +99,10 @@ void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out,
while (len >= 16) {
(*block) (ivec, ivec, key);
for (; n < 16; n += sizeof(size_t)) {
- size_t t = *(size_t *)(in + n);
- *(size_t *)(out + n) = *(size_t *)(ivec + n) ^ t;
- *(size_t *)(ivec + n) = t;
+ size_t t = *(size_t_aX *)(in + n);
+ *(size_t_aX *)(out + n)
+ = *(size_t_aX *)(ivec + n) ^ t;
+ *(size_t_aX *)(ivec + n) = t;
}
len -= 16;
out += 16;
diff --git a/crypto/openssl/crypto/modes/ctr128.c b/crypto/openssl/crypto/modes/ctr128.c
index ae35116e9524..1ed7decedfd3 100644
--- a/crypto/openssl/crypto/modes/ctr128.c
+++ b/crypto/openssl/crypto/modes/ctr128.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2008-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -11,6 +11,12 @@
#include "modes_local.h"
#include <string.h>
+#if defined(__GNUC__) && !defined(STRICT_ALIGNMENT)
+typedef size_t size_t_aX __attribute((__aligned__(1)));
+#else
+typedef size_t size_t_aX;
+#endif
+
/*
* NOTE: the IV/counter CTR mode is big-endian. The code itself is
* endian-neutral.
@@ -97,8 +103,9 @@ void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out,
(*block) (ivec, ecount_buf, key);
ctr128_inc_aligned(ivec);
for (n = 0; n < 16; n += sizeof(size_t))
- *(size_t *)(out + n) =
- *(size_t *)(in + n) ^ *(size_t *)(ecount_buf + n);
+ *(size_t_aX *)(out + n) =
+ *(size_t_aX *)(in + n)
+ ^ *(size_t_aX *)(ecount_buf + n);
len -= 16;
out += 16;
in += 16;
diff --git a/crypto/openssl/crypto/modes/gcm128.c b/crypto/openssl/crypto/modes/gcm128.c
index 48775e6d05ff..0c0bf3cda5b5 100644
--- a/crypto/openssl/crypto/modes/gcm128.c
+++ b/crypto/openssl/crypto/modes/gcm128.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2010-2018 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2010-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -11,6 +11,12 @@
#include "modes_local.h"
#include <string.h>
+#if defined(__GNUC__) && !defined(STRICT_ALIGNMENT)
+typedef size_t size_t_aX __attribute((__aligned__(1)));
+#else
+typedef size_t size_t_aX;
+#endif
+
#if defined(BSWAP4) && defined(STRICT_ALIGNMENT)
/* redefine, because alignment is ensured */
# undef GETU32
@@ -1080,8 +1086,8 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx,
size_t j = GHASH_CHUNK;
while (j) {
- size_t *out_t = (size_t *)out;
- const size_t *in_t = (const size_t *)in;
+ size_t_aX *out_t = (size_t_aX *)out;
+ const size_t_aX *in_t = (const size_t_aX *)in;
(*block) (ctx->Yi.c, ctx->EKi.c, key);
++ctr;
@@ -1107,8 +1113,8 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx,
size_t j = i;
while (len >= 16) {
- size_t *out_t = (size_t *)out;
- const size_t *in_t = (const size_t *)in;
+ size_t_aX *out_t = (size_t_aX *)out;
+ const size_t_aX *in_t = (const size_t_aX *)in;
(*block) (ctx->Yi.c, ctx->EKi.c, key);
++ctr;
@@ -1318,8 +1324,8 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx,
GHASH(ctx, in, GHASH_CHUNK);
while (j) {
- size_t *out_t = (size_t *)out;
- const size_t *in_t = (const size_t *)in;
+ size_t_aX *out_t = (size_t_aX *)out;
+ const size_t_aX *in_t = (const size_t_aX *)in;
(*block) (ctx->Yi.c, ctx->EKi.c, key);
++ctr;
@@ -1343,8 +1349,8 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx,
if ((i = (len & (size_t)-16))) {
GHASH(ctx, in, i);
while (len >= 16) {
- size_t *out_t = (size_t *)out;
- const size_t *in_t = (const size_t *)in;
+ size_t_aX *out_t = (size_t_aX *)out;
+ const size_t_aX *in_t = (const size_t_aX *)in;
(*block) (ctx->Yi.c, ctx->EKi.c, key);
++ctr;
diff --git a/crypto/openssl/crypto/modes/modes_local.h b/crypto/openssl/crypto/modes/modes_local.h
index f2ae01d11afd..28c32c0643f4 100644
--- a/crypto/openssl/crypto/modes/modes_local.h
+++ b/crypto/openssl/crypto/modes/modes_local.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2010-2018 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2010-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -37,6 +37,14 @@ typedef unsigned char u8;
# endif
#endif
+#ifndef STRICT_ALIGNMENT
+# ifdef __GNUC__
+typedef u32 u32_a1 __attribute((__aligned__(1)));
+# else
+typedef u32 u32_a1;
+# endif
+#endif
+
#if !defined(PEDANTIC) && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM)
# if defined(__GNUC__) && __GNUC__>=2
# if defined(__x86_64) || defined(__x86_64__)
@@ -86,8 +94,8 @@ _asm mov eax, val _asm bswap eax}
# endif
#endif
#if defined(BSWAP4) && !defined(STRICT_ALIGNMENT)
-# define GETU32(p) BSWAP4(*(const u32 *)(p))
-# define PUTU32(p,v) *(u32 *)(p) = BSWAP4(v)
+# define GETU32(p) BSWAP4(*(const u32_a1 *)(p))
+# define PUTU32(p,v) *(u32_a1 *)(p) = BSWAP4(v)
#else
# define GETU32(p) ((u32)(p)[0]<<24|(u32)(p)[1]<<16|(u32)(p)[2]<<8|(u32)(p)[3])
# define PUTU32(p,v) ((p)[0]=(u8)((v)>>24),(p)[1]=(u8)((v)>>16),(p)[2]=(u8)((v)>>8),(p)[3]=(u8)(v))
diff --git a/crypto/openssl/crypto/modes/ofb128.c b/crypto/openssl/crypto/modes/ofb128.c
index 44bdf888db1a..a3469712b2de 100644
--- a/crypto/openssl/crypto/modes/ofb128.c
+++ b/crypto/openssl/crypto/modes/ofb128.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2008-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -11,6 +11,12 @@
#include "modes_local.h"
#include <string.h>
+#if defined(__GNUC__) && !defined(STRICT_ALIGNMENT)
+typedef size_t size_t_aX __attribute((__aligned__(1)));
+#else
+typedef size_t size_t_aX;
+#endif
+
/*
* The input and output encrypted as though 128bit ofb mode is being used.
* The extra state information to record how much of the 128bit block we have
@@ -41,8 +47,9 @@ void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out,
while (len >= 16) {
(*block) (ivec, ivec, key);
for (; n < 16; n += sizeof(size_t))
- *(size_t *)(out + n) =
- *(size_t *)(in + n) ^ *(size_t *)(ivec + n);
+ *(size_t_aX *)(out + n) =
+ *(size_t_aX *)(in + n)
+ ^ *(size_t_aX *)(ivec + n);
len -= 16;
out += 16;
in += 16;
diff --git a/crypto/openssl/crypto/modes/xts128.c b/crypto/openssl/crypto/modes/xts128.c
index b5bda5e6402d..fe1626c62e10 100644
--- a/crypto/openssl/crypto/modes/xts128.c
+++ b/crypto/openssl/crypto/modes/xts128.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2011-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -11,6 +11,14 @@
#include "modes_local.h"
#include <string.h>
+#ifndef STRICT_ALIGNMENT
+# ifdef __GNUC__
+typedef u64 u64_a1 __attribute((__aligned__(1)));
+# else
+typedef u64 u64_a1;
+# endif
+#endif
+
int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx,
const unsigned char iv[16],
const unsigned char *inp, unsigned char *out,
@@ -45,8 +53,8 @@ int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx,
scratch.u[0] ^= tweak.u[0];
scratch.u[1] ^= tweak.u[1];
#else
- scratch.u[0] = ((u64 *)inp)[0] ^ tweak.u[0];
- scratch.u[1] = ((u64 *)inp)[1] ^ tweak.u[1];
+ scratch.u[0] = ((u64_a1 *)inp)[0] ^ tweak.u[0];
+ scratch.u[1] = ((u64_a1 *)inp)[1] ^ tweak.u[1];
#endif
(*ctx->block1) (scratch.c, scratch.c, ctx->key1);
#if defined(STRICT_ALIGNMENT)
@@ -54,8 +62,8 @@ int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx,
scratch.u[1] ^= tweak.u[1];
memcpy(out, scratch.c, 16);
#else
- ((u64 *)out)[0] = scratch.u[0] ^= tweak.u[0];
- ((u64 *)out)[1] = scratch.u[1] ^= tweak.u[1];
+ ((u64_a1 *)out)[0] = scratch.u[0] ^= tweak.u[0];
+ ((u64_a1 *)out)[1] = scratch.u[1] ^= tweak.u[1];
#endif
inp += 16;
out += 16;
@@ -128,8 +136,8 @@ int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx,
scratch.u[0] ^= tweak1.u[0];
scratch.u[1] ^= tweak1.u[1];
#else
- scratch.u[0] = ((u64 *)inp)[0] ^ tweak1.u[0];
- scratch.u[1] = ((u64 *)inp)[1] ^ tweak1.u[1];
+ scratch.u[0] = ((u64_a1 *)inp)[0] ^ tweak1.u[0];
+ scratch.u[1] = ((u64_a1 *)inp)[1] ^ tweak1.u[1];
#endif
(*ctx->block1) (scratch.c, scratch.c, ctx->key1);
scratch.u[0] ^= tweak1.u[0];
@@ -148,8 +156,8 @@ int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx,
scratch.u[1] ^= tweak.u[1];
memcpy(out, scratch.c, 16);
#else
- ((u64 *)out)[0] = scratch.u[0] ^ tweak.u[0];
- ((u64 *)out)[1] = scratch.u[1] ^ tweak.u[1];
+ ((u64_a1 *)out)[0] = scratch.u[0] ^ tweak.u[0];
+ ((u64_a1 *)out)[1] = scratch.u[1] ^ tweak.u[1];
#endif
}
diff --git a/crypto/openssl/crypto/o_str.c b/crypto/openssl/crypto/o_str.c
index 9ad7a89dcadf..eb9f21cc0c45 100644
--- a/crypto/openssl/crypto/o_str.c
+++ b/crypto/openssl/crypto/o_str.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2003-2019 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2003-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -220,7 +220,7 @@ char *OPENSSL_buf2hexstr(const unsigned char *buffer, long len)
int openssl_strerror_r(int errnum, char *buf, size_t buflen)
{
-#if defined(_MSC_VER) && _MSC_VER>=1400
+#if defined(_MSC_VER) && _MSC_VER>=1400 && !defined(_WIN32_WCE)
return !strerror_s(buf, buflen, errnum);
#elif defined(_GNU_SOURCE)
char *err;
diff --git a/crypto/openssl/crypto/o_time.c b/crypto/openssl/crypto/o_time.c
index 6d764f55e2e8..3502edda6238 100644
--- a/crypto/openssl/crypto/o_time.c
+++ b/crypto/openssl/crypto/o_time.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -41,7 +41,7 @@ struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result)
if (gmtime_r(timer, result) == NULL)
return NULL;
ts = result;
-#elif defined (OPENSSL_SYS_WINDOWS) && defined(_MSC_VER) && _MSC_VER >= 1400
+#elif defined (OPENSSL_SYS_WINDOWS) && defined(_MSC_VER) && _MSC_VER >= 1400 && !defined(_WIN32_WCE)
if (gmtime_s(result, timer))
return NULL;
ts = result;
diff --git a/crypto/openssl/crypto/pem/pem_err.c b/crypto/openssl/crypto/pem/pem_err.c
index f642030aa539..0f3cb02407e6 100644
--- a/crypto/openssl/crypto/pem/pem_err.c
+++ b/crypto/openssl/crypto/pem/pem_err.c
@@ -1,6 +1,6 @@
/*
* Generated by util/mkerr.pl DO NOT EDIT
- * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -60,6 +60,8 @@ static const ERR_STRING_DATA PEM_str_functs[] = {
{ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_SIGNFINAL, 0), "PEM_SignFinal"},
{ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_WRITE, 0), "PEM_write"},
{ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_WRITE_BIO, 0), "PEM_write_bio"},
+ {ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_WRITE_BIO_PRIVATEKEY_TRADITIONAL, 0),
+ "PEM_write_bio_PrivateKey_traditional"},
{ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_WRITE_PRIVATEKEY, 0),
"PEM_write_PrivateKey"},
{ERR_PACK(ERR_LIB_PEM, PEM_F_PEM_X509_INFO_READ, 0), "PEM_X509_INFO_read"},
@@ -109,6 +111,8 @@ static const ERR_STRING_DATA PEM_str_reasons[] = {
"unsupported encryption"},
{ERR_PACK(ERR_LIB_PEM, 0, PEM_R_UNSUPPORTED_KEY_COMPONENTS),
"unsupported key components"},
+ {ERR_PACK(ERR_LIB_PEM, 0, PEM_R_UNSUPPORTED_PUBLIC_KEY_TYPE),
+ "unsupported public key type"},
{0, NULL}
};
diff --git a/crypto/openssl/crypto/pem/pem_lib.c b/crypto/openssl/crypto/pem/pem_lib.c
index 64baf7108ea4..a26322119aa7 100644
--- a/crypto/openssl/crypto/pem/pem_lib.c
+++ b/crypto/openssl/crypto/pem/pem_lib.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -332,7 +332,7 @@ int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp,
}
}
- if ((dsize = i2d(x, NULL)) < 0) {
+ if ((dsize = i2d(x, NULL)) <= 0) {
PEMerr(PEM_F_PEM_ASN1_WRITE_BIO, ERR_R_ASN1_LIB);
dsize = 0;
goto err;
@@ -791,7 +791,7 @@ static int get_header_and_data(BIO *bp, BIO **header, BIO **data, char *name,
{
BIO *tmp = *header;
char *linebuf, *p;
- int len, line, ret = 0, end = 0;
+ int len, line, ret = 0, end = 0, prev_partial_line_read = 0, partial_line_read = 0;
/* 0 if not seen (yet), 1 if reading header, 2 if finished header */
enum header_status got_header = MAYBE_HEADER;
unsigned int flags_mask;
@@ -809,10 +809,18 @@ static int get_header_and_data(BIO *bp, BIO **header, BIO **data, char *name,
flags_mask = ~0u;
len = BIO_gets(bp, linebuf, LINESIZE);
if (len <= 0) {
- PEMerr(PEM_F_GET_HEADER_AND_DATA, PEM_R_SHORT_HEADER);
+ PEMerr(PEM_F_GET_HEADER_AND_DATA, PEM_R_BAD_END_LINE);
goto err;
}
+ /*
+ * Check if line has been read completely or if only part of the line
+ * has been read. Keep the previous value to ignore newlines that
+ * appear due to reading a line up until the char before the newline.
+ */
+ prev_partial_line_read = partial_line_read;
+ partial_line_read = len == LINESIZE-1 && linebuf[LINESIZE-2] != '\n';
+
if (got_header == MAYBE_HEADER) {
if (memchr(linebuf, ':', len) != NULL)
got_header = IN_HEADER;
@@ -823,13 +831,19 @@ static int get_header_and_data(BIO *bp, BIO **header, BIO **data, char *name,
/* Check for end of header. */
if (linebuf[0] == '\n') {
- if (got_header == POST_HEADER) {
- /* Another blank line is an error. */
- PEMerr(PEM_F_GET_HEADER_AND_DATA, PEM_R_BAD_END_LINE);
- goto err;
+ /*
+ * If previous line has been read only partially this newline is a
+ * regular newline at the end of a line and not an empty line.
+ */
+ if (!prev_partial_line_read) {
+ if (got_header == POST_HEADER) {
+ /* Another blank line is an error. */
+ PEMerr(PEM_F_GET_HEADER_AND_DATA, PEM_R_BAD_END_LINE);
+ goto err;
+ }
+ got_header = POST_HEADER;
+ tmp = *data;
}
- got_header = POST_HEADER;
- tmp = *data;
continue;
}
diff --git a/crypto/openssl/crypto/pem/pem_pkey.c b/crypto/openssl/crypto/pem/pem_pkey.c
index e58cdf4a3e0b..4a9492724487 100644
--- a/crypto/openssl/crypto/pem/pem_pkey.c
+++ b/crypto/openssl/crypto/pem/pem_pkey.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -108,6 +108,12 @@ int PEM_write_bio_PrivateKey_traditional(BIO *bp, EVP_PKEY *x,
pem_password_cb *cb, void *u)
{
char pem_str[80];
+
+ if (x->ameth == NULL || x->ameth->old_priv_encode == NULL) {
+ PEMerr(PEM_F_PEM_WRITE_BIO_PRIVATEKEY_TRADITIONAL,
+ PEM_R_UNSUPPORTED_PUBLIC_KEY_TYPE);
+ return 0;
+ }
BIO_snprintf(pem_str, 80, "%s PRIVATE KEY", x->ameth->pem_str);
return PEM_ASN1_write_bio((i2d_of_void *)i2d_PrivateKey,
pem_str, bp, x, enc, kstr, klen, cb, u);
diff --git a/crypto/openssl/crypto/pem/pvkfmt.c b/crypto/openssl/crypto/pem/pvkfmt.c
index 1fc19c17f913..a933b7c1813c 100644
--- a/crypto/openssl/crypto/pem/pvkfmt.c
+++ b/crypto/openssl/crypto/pem/pvkfmt.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2005-2019 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2005-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -29,10 +29,10 @@ static unsigned int read_ledword(const unsigned char **in)
{
const unsigned char *p = *in;
unsigned int ret;
- ret = *p++;
- ret |= (*p++ << 8);
- ret |= (*p++ << 16);
- ret |= (*p++ << 24);
+ ret = (unsigned int)*p++;
+ ret |= (unsigned int)*p++ << 8;
+ ret |= (unsigned int)*p++ << 16;
+ ret |= (unsigned int)*p++ << 24;
*in = p;
return ret;
}
@@ -875,9 +875,9 @@ int i2b_PVK_bio(BIO *out, EVP_PKEY *pk, int enclevel,
wrlen = BIO_write(out, tmp, outlen);
OPENSSL_free(tmp);
if (wrlen == outlen) {
- PEMerr(PEM_F_I2B_PVK_BIO, PEM_R_BIO_WRITE_FAILURE);
return outlen;
}
+ PEMerr(PEM_F_I2B_PVK_BIO, PEM_R_BIO_WRITE_FAILURE);
return -1;
}
diff --git a/crypto/openssl/crypto/rand/drbg_ctr.c b/crypto/openssl/crypto/rand/drbg_ctr.c
index 0f0ad1b37be4..a757d0a258ab 100644
--- a/crypto/openssl/crypto/rand/drbg_ctr.c
+++ b/crypto/openssl/crypto/rand/drbg_ctr.c
@@ -63,15 +63,15 @@ static void ctr_XOR(RAND_DRBG_CTR *ctr, const unsigned char *in, size_t inlen)
* Process a complete block using BCC algorithm of SP 800-90A 10.3.3
*/
__owur static int ctr_BCC_block(RAND_DRBG_CTR *ctr, unsigned char *out,
- const unsigned char *in)
+ const unsigned char *in, int len)
{
int i, outlen = AES_BLOCK_SIZE;
- for (i = 0; i < 16; i++)
+ for (i = 0; i < len; i++)
out[i] ^= in[i];
- if (!EVP_CipherUpdate(ctr->ctx_df, out, &outlen, out, AES_BLOCK_SIZE)
- || outlen != AES_BLOCK_SIZE)
+ if (!EVP_CipherUpdate(ctr->ctx_df, out, &outlen, out, len)
+ || outlen != len)
return 0;
return 1;
}
@@ -82,12 +82,16 @@ __owur static int ctr_BCC_block(RAND_DRBG_CTR *ctr, unsigned char *out,
*/
__owur static int ctr_BCC_blocks(RAND_DRBG_CTR *ctr, const unsigned char *in)
{
- if (!ctr_BCC_block(ctr, ctr->KX, in)
- || !ctr_BCC_block(ctr, ctr->KX + 16, in))
- return 0;
- if (ctr->keylen != 16 && !ctr_BCC_block(ctr, ctr->KX + 32, in))
- return 0;
- return 1;
+ unsigned char in_tmp[48];
+ unsigned char num_of_blk = 2;
+
+ memcpy(in_tmp, in, 16);
+ memcpy(in_tmp + 16, in, 16);
+ if (ctr->keylen != 16) {
+ memcpy(in_tmp + 32, in, 16);
+ num_of_blk = 3;
+ }
+ return ctr_BCC_block(ctr, ctr->KX, in_tmp, AES_BLOCK_SIZE * num_of_blk);
}
/*
@@ -96,19 +100,14 @@ __owur static int ctr_BCC_blocks(RAND_DRBG_CTR *ctr, const unsigned char *in)
*/
__owur static int ctr_BCC_init(RAND_DRBG_CTR *ctr)
{
+ unsigned char bltmp[48] = {0};
+ unsigned char num_of_blk;
+
memset(ctr->KX, 0, 48);
- memset(ctr->bltmp, 0, 16);
- if (!ctr_BCC_block(ctr, ctr->KX, ctr->bltmp))
- return 0;
- ctr->bltmp[3] = 1;
- if (!ctr_BCC_block(ctr, ctr->KX + 16, ctr->bltmp))
- return 0;
- if (ctr->keylen != 16) {
- ctr->bltmp[3] = 2;
- if (!ctr_BCC_block(ctr, ctr->KX + 32, ctr->bltmp))
- return 0;
- }
- return 1;
+ num_of_blk = ctr->keylen == 16 ? 2 : 3;
+ bltmp[(AES_BLOCK_SIZE * 1) + 3] = 1;
+ bltmp[(AES_BLOCK_SIZE * 2) + 3] = 2;
+ return ctr_BCC_block(ctr, ctr->KX, bltmp, num_of_blk * AES_BLOCK_SIZE);
}
/*
@@ -197,20 +196,20 @@ __owur static int ctr_df(RAND_DRBG_CTR *ctr,
|| !ctr_BCC_final(ctr))
return 0;
/* Set up key K */
- if (!EVP_CipherInit_ex(ctr->ctx, ctr->cipher, NULL, ctr->KX, NULL, 1))
+ if (!EVP_CipherInit_ex(ctr->ctx_ecb, NULL, NULL, ctr->KX, NULL, -1))
return 0;
/* X follows key K */
- if (!EVP_CipherUpdate(ctr->ctx, ctr->KX, &outlen, ctr->KX + ctr->keylen,
+ if (!EVP_CipherUpdate(ctr->ctx_ecb, ctr->KX, &outlen, ctr->KX + ctr->keylen,
AES_BLOCK_SIZE)
|| outlen != AES_BLOCK_SIZE)
return 0;
- if (!EVP_CipherUpdate(ctr->ctx, ctr->KX + 16, &outlen, ctr->KX,
+ if (!EVP_CipherUpdate(ctr->ctx_ecb, ctr->KX + 16, &outlen, ctr->KX,
AES_BLOCK_SIZE)
|| outlen != AES_BLOCK_SIZE)
return 0;
if (ctr->keylen != 16)
- if (!EVP_CipherUpdate(ctr->ctx, ctr->KX + 32, &outlen, ctr->KX + 16,
- AES_BLOCK_SIZE)
+ if (!EVP_CipherUpdate(ctr->ctx_ecb, ctr->KX + 32, &outlen,
+ ctr->KX + 16, AES_BLOCK_SIZE)
|| outlen != AES_BLOCK_SIZE)
return 0;
return 1;
@@ -229,31 +228,25 @@ __owur static int ctr_update(RAND_DRBG *drbg,
{
RAND_DRBG_CTR *ctr = &drbg->data.ctr;
int outlen = AES_BLOCK_SIZE;
+ unsigned char V_tmp[48], out[48];
+ unsigned char len;
/* correct key is already set up. */
+ memcpy(V_tmp, ctr->V, 16);
inc_128(ctr);
- if (!EVP_CipherUpdate(ctr->ctx, ctr->K, &outlen, ctr->V, AES_BLOCK_SIZE)
- || outlen != AES_BLOCK_SIZE)
- return 0;
-
- /* If keylen longer than 128 bits need extra encrypt */
- if (ctr->keylen != 16) {
+ memcpy(V_tmp + 16, ctr->V, 16);
+ if (ctr->keylen == 16) {
+ len = 32;
+ } else {
inc_128(ctr);
- if (!EVP_CipherUpdate(ctr->ctx, ctr->K+16, &outlen, ctr->V,
- AES_BLOCK_SIZE)
- || outlen != AES_BLOCK_SIZE)
- return 0;
+ memcpy(V_tmp + 32, ctr->V, 16);
+ len = 48;
}
- inc_128(ctr);
- if (!EVP_CipherUpdate(ctr->ctx, ctr->V, &outlen, ctr->V, AES_BLOCK_SIZE)
- || outlen != AES_BLOCK_SIZE)
+ if (!EVP_CipherUpdate(ctr->ctx_ecb, out, &outlen, V_tmp, len)
+ || outlen != len)
return 0;
-
- /* If 192 bit key part of V is on end of K */
- if (ctr->keylen == 24) {
- memcpy(ctr->V + 8, ctr->V, 8);
- memcpy(ctr->V, ctr->K + 24, 8);
- }
+ memcpy(ctr->K, out, ctr->keylen);
+ memcpy(ctr->V, out + ctr->keylen, 16);
if ((drbg->flags & RAND_DRBG_FLAG_CTR_NO_DF) == 0) {
/* If no input reuse existing derived value */
@@ -268,7 +261,8 @@ __owur static int ctr_update(RAND_DRBG *drbg,
ctr_XOR(ctr, in2, in2len);
}
- if (!EVP_CipherInit_ex(ctr->ctx, ctr->cipher, NULL, ctr->K, NULL, 1))
+ if (!EVP_CipherInit_ex(ctr->ctx_ecb, NULL, NULL, ctr->K, NULL, -1)
+ || !EVP_CipherInit_ex(ctr->ctx_ctr, NULL, NULL, ctr->K, NULL, -1))
return 0;
return 1;
}
@@ -285,8 +279,10 @@ __owur static int drbg_ctr_instantiate(RAND_DRBG *drbg,
memset(ctr->K, 0, sizeof(ctr->K));
memset(ctr->V, 0, sizeof(ctr->V));
- if (!EVP_CipherInit_ex(ctr->ctx, ctr->cipher, NULL, ctr->K, NULL, 1))
+ if (!EVP_CipherInit_ex(ctr->ctx_ecb, NULL, NULL, ctr->K, NULL, -1))
return 0;
+
+ inc_128(ctr);
if (!ctr_update(drbg, entropy, entropylen, pers, perslen, nonce, noncelen))
return 0;
return 1;
@@ -296,20 +292,40 @@ __owur static int drbg_ctr_reseed(RAND_DRBG *drbg,
const unsigned char *entropy, size_t entropylen,
const unsigned char *adin, size_t adinlen)
{
+ RAND_DRBG_CTR *ctr = &drbg->data.ctr;
+
if (entropy == NULL)
return 0;
+
+ inc_128(ctr);
if (!ctr_update(drbg, entropy, entropylen, adin, adinlen, NULL, 0))
return 0;
return 1;
}
+static void ctr96_inc(unsigned char *counter)
+{
+ u32 n = 12, c = 1;
+
+ do {
+ --n;
+ c += counter[n];
+ counter[n] = (u8)c;
+ c >>= 8;
+ } while (n);
+}
+
__owur static int drbg_ctr_generate(RAND_DRBG *drbg,
unsigned char *out, size_t outlen,
const unsigned char *adin, size_t adinlen)
{
RAND_DRBG_CTR *ctr = &drbg->data.ctr;
+ unsigned int ctr32, blocks;
+ int outl, buflen;
if (adin != NULL && adinlen != 0) {
+ inc_128(ctr);
+
if (!ctr_update(drbg, adin, adinlen, NULL, 0, NULL, 0))
return 0;
/* This means we reuse derived value */
@@ -321,28 +337,53 @@ __owur static int drbg_ctr_generate(RAND_DRBG *drbg,
adinlen = 0;
}
- for ( ; ; ) {
- int outl = AES_BLOCK_SIZE;
+ inc_128(ctr);
+ if (outlen == 0) {
inc_128(ctr);
- if (outlen < 16) {
- /* Use K as temp space as it will be updated */
- if (!EVP_CipherUpdate(ctr->ctx, ctr->K, &outl, ctr->V,
- AES_BLOCK_SIZE)
- || outl != AES_BLOCK_SIZE)
- return 0;
- memcpy(out, ctr->K, outlen);
- break;
- }
- if (!EVP_CipherUpdate(ctr->ctx, out, &outl, ctr->V, AES_BLOCK_SIZE)
- || outl != AES_BLOCK_SIZE)
+
+ if (!ctr_update(drbg, adin, adinlen, NULL, 0, NULL, 0))
return 0;
- out += 16;
- outlen -= 16;
- if (outlen == 0)
- break;
+ return 1;
}
+ memset(out, 0, outlen);
+
+ do {
+ if (!EVP_CipherInit_ex(ctr->ctx_ctr,
+ NULL, NULL, NULL, ctr->V, -1))
+ return 0;
+
+ /*-
+ * outlen has type size_t while EVP_CipherUpdate takes an
+ * int argument and thus cannot be guaranteed to process more
+ * than 2^31-1 bytes at a time. We process such huge generate
+ * requests in 2^30 byte chunks, which is the greatest multiple
+ * of AES block size lower than or equal to 2^31-1.
+ */
+ buflen = outlen > (1U << 30) ? (1U << 30) : outlen;
+ blocks = (buflen + 15) / 16;
+
+ ctr32 = GETU32(ctr->V + 12) + blocks;
+ if (ctr32 < blocks) {
+ /* 32-bit counter overflow into V. */
+ if (ctr32 != 0) {
+ blocks -= ctr32;
+ buflen = blocks * 16;
+ ctr32 = 0;
+ }
+ ctr96_inc(ctr->V);
+ }
+ PUTU32(ctr->V + 12, ctr32);
+
+ if (!EVP_CipherUpdate(ctr->ctx_ctr, out, &outl, out, buflen)
+ || outl != buflen)
+ return 0;
+
+ out += buflen;
+ outlen -= buflen;
+ } while (outlen);
+
if (!ctr_update(drbg, adin, adinlen, NULL, 0, NULL, 0))
return 0;
return 1;
@@ -350,7 +391,8 @@ __owur static int drbg_ctr_generate(RAND_DRBG *drbg,
static int drbg_ctr_uninstantiate(RAND_DRBG *drbg)
{
- EVP_CIPHER_CTX_free(drbg->data.ctr.ctx);
+ EVP_CIPHER_CTX_free(drbg->data.ctr.ctx_ecb);
+ EVP_CIPHER_CTX_free(drbg->data.ctr.ctx_ctr);
EVP_CIPHER_CTX_free(drbg->data.ctr.ctx_df);
OPENSSL_cleanse(&drbg->data.ctr, sizeof(drbg->data.ctr));
return 1;
@@ -374,25 +416,36 @@ int drbg_ctr_init(RAND_DRBG *drbg)
return 0;
case NID_aes_128_ctr:
keylen = 16;
- ctr->cipher = EVP_aes_128_ecb();
+ ctr->cipher_ecb = EVP_aes_128_ecb();
+ ctr->cipher_ctr = EVP_aes_128_ctr();
break;
case NID_aes_192_ctr:
keylen = 24;
- ctr->cipher = EVP_aes_192_ecb();
+ ctr->cipher_ecb = EVP_aes_192_ecb();
+ ctr->cipher_ctr = EVP_aes_192_ctr();
break;
case NID_aes_256_ctr:
keylen = 32;
- ctr->cipher = EVP_aes_256_ecb();
+ ctr->cipher_ecb = EVP_aes_256_ecb();
+ ctr->cipher_ctr = EVP_aes_256_ctr();
break;
}
drbg->meth = &drbg_ctr_meth;
ctr->keylen = keylen;
- if (ctr->ctx == NULL)
- ctr->ctx = EVP_CIPHER_CTX_new();
- if (ctr->ctx == NULL)
+ if (ctr->ctx_ecb == NULL)
+ ctr->ctx_ecb = EVP_CIPHER_CTX_new();
+ if (ctr->ctx_ctr == NULL)
+ ctr->ctx_ctr = EVP_CIPHER_CTX_new();
+ if (ctr->ctx_ecb == NULL || ctr->ctx_ctr == NULL
+ || !EVP_CipherInit_ex(ctr->ctx_ecb,
+ ctr->cipher_ecb, NULL, NULL, NULL, 1)
+ || !EVP_CipherInit_ex(ctr->ctx_ctr,
+ ctr->cipher_ctr, NULL, NULL, NULL, 1))
return 0;
+
+ drbg->meth = &drbg_ctr_meth;
drbg->strength = keylen * 8;
drbg->seedlen = keylen + 16;
@@ -410,7 +463,8 @@ int drbg_ctr_init(RAND_DRBG *drbg)
if (ctr->ctx_df == NULL)
return 0;
/* Set key schedule for df_key */
- if (!EVP_CipherInit_ex(ctr->ctx_df, ctr->cipher, NULL, df_key, NULL, 1))
+ if (!EVP_CipherInit_ex(ctr->ctx_df,
+ ctr->cipher_ecb, NULL, df_key, NULL, 1))
return 0;
drbg->min_entropylen = ctr->keylen;
diff --git a/crypto/openssl/crypto/rand/drbg_lib.c b/crypto/openssl/crypto/rand/drbg_lib.c
index faf0590c6c28..8c7c28c9703a 100644
--- a/crypto/openssl/crypto/rand/drbg_lib.c
+++ b/crypto/openssl/crypto/rand/drbg_lib.c
@@ -327,13 +327,6 @@ int RAND_DRBG_instantiate(RAND_DRBG *drbg,
max_entropylen += drbg->max_noncelen;
}
- drbg->reseed_next_counter = tsan_load(&drbg->reseed_prop_counter);
- if (drbg->reseed_next_counter) {
- drbg->reseed_next_counter++;
- if(!drbg->reseed_next_counter)
- drbg->reseed_next_counter = 1;
- }
-
if (drbg->get_entropy != NULL)
entropylen = drbg->get_entropy(drbg, &entropy, min_entropy,
min_entropylen, max_entropylen, 0);
@@ -359,9 +352,15 @@ int RAND_DRBG_instantiate(RAND_DRBG *drbg,
}
drbg->state = DRBG_READY;
- drbg->reseed_gen_counter = 1;
+ drbg->generate_counter = 1;
drbg->reseed_time = time(NULL);
- tsan_store(&drbg->reseed_prop_counter, drbg->reseed_next_counter);
+ if (drbg->enable_reseed_propagation) {
+ if (drbg->parent == NULL)
+ tsan_counter(&drbg->reseed_counter);
+ else
+ tsan_store(&drbg->reseed_counter,
+ tsan_load(&drbg->parent->reseed_counter));
+ }
end:
if (entropy != NULL && drbg->cleanup_entropy != NULL)
@@ -428,14 +427,6 @@ int RAND_DRBG_reseed(RAND_DRBG *drbg,
}
drbg->state = DRBG_ERROR;
-
- drbg->reseed_next_counter = tsan_load(&drbg->reseed_prop_counter);
- if (drbg->reseed_next_counter) {
- drbg->reseed_next_counter++;
- if(!drbg->reseed_next_counter)
- drbg->reseed_next_counter = 1;
- }
-
if (drbg->get_entropy != NULL)
entropylen = drbg->get_entropy(drbg, &entropy, drbg->strength,
drbg->min_entropylen,
@@ -451,9 +442,15 @@ int RAND_DRBG_reseed(RAND_DRBG *drbg,
goto end;
drbg->state = DRBG_READY;
- drbg->reseed_gen_counter = 1;
+ drbg->generate_counter = 1;
drbg->reseed_time = time(NULL);
- tsan_store(&drbg->reseed_prop_counter, drbg->reseed_next_counter);
+ if (drbg->enable_reseed_propagation) {
+ if (drbg->parent == NULL)
+ tsan_counter(&drbg->reseed_counter);
+ else
+ tsan_store(&drbg->reseed_counter,
+ tsan_load(&drbg->parent->reseed_counter));
+ }
end:
if (entropy != NULL && drbg->cleanup_entropy != NULL)
@@ -554,7 +551,9 @@ int rand_drbg_restart(RAND_DRBG *drbg,
drbg->meth->reseed(drbg, adin, adinlen, NULL, 0);
} else if (reseeded == 0) {
/* do a full reseeding if it has not been done yet above */
- RAND_DRBG_reseed(drbg, NULL, 0, 0);
+ if (!RAND_DRBG_reseed(drbg, NULL, 0, 0)) {
+ RANDerr(RAND_F_RAND_DRBG_RESTART, RAND_R_RESEED_ERROR);
+ }
}
}
@@ -612,7 +611,7 @@ int RAND_DRBG_generate(RAND_DRBG *drbg, unsigned char *out, size_t outlen,
}
if (drbg->reseed_interval > 0) {
- if (drbg->reseed_gen_counter >= drbg->reseed_interval)
+ if (drbg->generate_counter >= drbg->reseed_interval)
reseed_required = 1;
}
if (drbg->reseed_time_interval > 0) {
@@ -621,11 +620,8 @@ int RAND_DRBG_generate(RAND_DRBG *drbg, unsigned char *out, size_t outlen,
|| now - drbg->reseed_time >= drbg->reseed_time_interval)
reseed_required = 1;
}
- if (drbg->parent != NULL) {
- unsigned int reseed_counter = tsan_load(&drbg->reseed_prop_counter);
- if (reseed_counter > 0
- && tsan_load(&drbg->parent->reseed_prop_counter)
- != reseed_counter)
+ if (drbg->enable_reseed_propagation && drbg->parent != NULL) {
+ if (drbg->reseed_counter != tsan_load(&drbg->parent->reseed_counter))
reseed_required = 1;
}
@@ -644,7 +640,7 @@ int RAND_DRBG_generate(RAND_DRBG *drbg, unsigned char *out, size_t outlen,
return 0;
}
- drbg->reseed_gen_counter++;
+ drbg->generate_counter++;
return 1;
}
@@ -706,8 +702,7 @@ int RAND_DRBG_set_callbacks(RAND_DRBG *drbg,
RAND_DRBG_get_nonce_fn get_nonce,
RAND_DRBG_cleanup_nonce_fn cleanup_nonce)
{
- if (drbg->state != DRBG_UNINITIALISED
- || drbg->parent != NULL)
+ if (drbg->state != DRBG_UNINITIALISED)
return 0;
drbg->get_entropy = get_entropy;
drbg->cleanup_entropy = cleanup_entropy;
@@ -883,8 +878,9 @@ static RAND_DRBG *drbg_setup(RAND_DRBG *parent)
if (parent == NULL && rand_drbg_enable_locking(drbg) == 0)
goto err;
- /* enable seed propagation */
- tsan_store(&drbg->reseed_prop_counter, 1);
+ /* enable reseed propagation */
+ drbg->enable_reseed_propagation = 1;
+ drbg->reseed_counter = 1;
/*
* Ignore instantiation error to support just-in-time instantiation.
diff --git a/crypto/openssl/crypto/rand/rand_lib.c b/crypto/openssl/crypto/rand/rand_lib.c
index ab4e9b5486cb..ba3a29e58468 100644
--- a/crypto/openssl/crypto/rand/rand_lib.c
+++ b/crypto/openssl/crypto/rand/rand_lib.c
@@ -174,8 +174,6 @@ size_t rand_drbg_get_entropy(RAND_DRBG *drbg,
prediction_resistance,
(unsigned char *)&drbg, sizeof(drbg)) != 0)
bytes = bytes_needed;
- drbg->reseed_next_counter
- = tsan_load(&drbg->parent->reseed_prop_counter);
rand_drbg_unlock(drbg->parent);
rand_pool_add_end(pool, bytes, 8 * bytes);
diff --git a/crypto/openssl/crypto/rand/rand_local.h b/crypto/openssl/crypto/rand/rand_local.h
index 1bc9bf7d266d..a5de5252dcdc 100644
--- a/crypto/openssl/crypto/rand/rand_local.h
+++ b/crypto/openssl/crypto/rand/rand_local.h
@@ -138,9 +138,11 @@ typedef struct rand_drbg_method_st {
* The state of a DRBG AES-CTR.
*/
typedef struct rand_drbg_ctr_st {
- EVP_CIPHER_CTX *ctx;
+ EVP_CIPHER_CTX *ctx_ecb;
+ EVP_CIPHER_CTX *ctx_ctr;
EVP_CIPHER_CTX *ctx_df;
- const EVP_CIPHER *cipher;
+ const EVP_CIPHER *cipher_ecb;
+ const EVP_CIPHER *cipher_ctr;
size_t keylen;
unsigned char K[32];
unsigned char V[16];
@@ -233,7 +235,7 @@ struct rand_drbg_st {
size_t max_perslen, max_adinlen;
/* Counts the number of generate requests since the last reseed. */
- unsigned int reseed_gen_counter;
+ unsigned int generate_counter;
/*
* Maximum number of generate requests until a reseed is required.
* This value is ignored if it is zero.
@@ -246,9 +248,15 @@ struct rand_drbg_st {
* This value is ignored if it is zero.
*/
time_t reseed_time_interval;
+
+ /*
+ * Enables reseed propagation (see following comment)
+ */
+ unsigned int enable_reseed_propagation;
+
/*
* Counts the number of reseeds since instantiation.
- * This value is ignored if it is zero.
+ * This value is ignored if enable_reseed_propagation is zero.
*
* This counter is used only for seed propagation from the <master> DRBG
* to its two children, the <public> and <private> DRBG. This feature is
@@ -256,8 +264,7 @@ struct rand_drbg_st {
* is added by RAND_add() or RAND_seed() will have an immediate effect on
* the output of RAND_bytes() resp. RAND_priv_bytes().
*/
- TSAN_QUALIFIER unsigned int reseed_prop_counter;
- unsigned int reseed_next_counter;
+ TSAN_QUALIFIER unsigned int reseed_counter;
size_t seedlen;
DRBG_STATUS state;
diff --git a/crypto/openssl/crypto/rand/rand_unix.c b/crypto/openssl/crypto/rand/rand_unix.c
index fe457cab4a3b..da66773e4ab9 100644
--- a/crypto/openssl/crypto/rand/rand_unix.c
+++ b/crypto/openssl/crypto/rand/rand_unix.c
@@ -26,12 +26,12 @@
# include <sys/utsname.h>
# endif
#endif
-#if defined(__FreeBSD__) && !defined(OPENSSL_SYS_UEFI)
+#if (defined(__FreeBSD__) || defined(__NetBSD__)) && !defined(OPENSSL_SYS_UEFI)
# include <sys/types.h>
# include <sys/sysctl.h>
# include <sys/param.h>
#endif
-#if defined(__OpenBSD__) || defined(__NetBSD__)
+#if defined(__OpenBSD__)
# include <sys/param.h>
#endif
@@ -247,10 +247,12 @@ static ssize_t sysctl_random(char *buf, size_t buflen)
* when the sysctl returns long and we want to request something not a
* multiple of longs, which should never be the case.
*/
+#if defined(__FreeBSD__)
if (!ossl_assert(buflen % sizeof(long) == 0)) {
errno = EINVAL;
return -1;
}
+#endif
/*
* On NetBSD before 4.0 KERN_ARND was an alias for KERN_URND, and only
@@ -268,7 +270,7 @@ static ssize_t sysctl_random(char *buf, size_t buflen)
mib[1] = KERN_ARND;
do {
- len = buflen;
+ len = buflen > 256 ? 256 : buflen;
if (sysctl(mib, 2, buf, &len, NULL, 0) == -1)
return done > 0 ? done : -1;
done += len;
@@ -409,7 +411,8 @@ static struct random_device {
} random_devices[OSSL_NELEM(random_device_paths)];
static int keep_random_devices_open = 1;
-# if defined(__linux) && defined(DEVRANDOM_WAIT)
+# if defined(__linux) && defined(DEVRANDOM_WAIT) \
+ && defined(OPENSSL_RAND_SEED_GETRANDOM)
static void *shm_addr;
static void cleanup_shm(void)
@@ -487,7 +490,7 @@ static int wait_random_seeded(void)
}
return seeded;
}
-# else /* defined __linux */
+# else /* defined __linux && DEVRANDOM_WAIT && OPENSSL_RAND_SEED_GETRANDOM */
static int wait_random_seeded(void)
{
return 1;
diff --git a/crypto/openssl/crypto/rand/randfile.c b/crypto/openssl/crypto/rand/randfile.c
index ba121eefbf09..229ce864a312 100644
--- a/crypto/openssl/crypto/rand/randfile.c
+++ b/crypto/openssl/crypto/rand/randfile.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -26,7 +26,7 @@
#ifndef OPENSSL_NO_POSIX_IO
# include <sys/stat.h>
# include <fcntl.h>
-# ifdef _WIN32
+# if defined(_WIN32) && !defined(_WIN32_WCE)
# include <windows.h>
# include <io.h>
# define stat _stat
diff --git a/crypto/openssl/crypto/rsa/rsa_ameth.c b/crypto/openssl/crypto/rsa/rsa_ameth.c
index 6692a51ed8fe..fb045544a832 100644
--- a/crypto/openssl/crypto/rsa/rsa_ameth.c
+++ b/crypto/openssl/crypto/rsa/rsa_ameth.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2006-2019 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -118,6 +118,15 @@ static int rsa_pub_decode(EVP_PKEY *pkey, X509_PUBKEY *pubkey)
static int rsa_pub_cmp(const EVP_PKEY *a, const EVP_PKEY *b)
{
+ /*
+ * Don't check the public/private key, this is mostly for smart
+ * cards.
+ */
+ if (((RSA_flags(a->pkey.rsa) & RSA_METHOD_FLAG_NO_CHECK))
+ || (RSA_flags(b->pkey.rsa) & RSA_METHOD_FLAG_NO_CHECK)) {
+ return 1;
+ }
+
if (BN_cmp(b->pkey.rsa->n, a->pkey.rsa->n) != 0
|| BN_cmp(b->pkey.rsa->e, a->pkey.rsa->e) != 0)
return 0;
diff --git a/crypto/openssl/crypto/store/loader_file.c b/crypto/openssl/crypto/store/loader_file.c
index 8f1d20e74aa4..9c9e3bd08506 100644
--- a/crypto/openssl/crypto/store/loader_file.c
+++ b/crypto/openssl/crypto/store/loader_file.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -429,6 +429,42 @@ static OSSL_STORE_INFO *try_decode_PrivateKey(const char *pem_name,
}
} else {
int i;
+#ifndef OPENSSL_NO_ENGINE
+ ENGINE *curengine = ENGINE_get_first();
+
+ while (curengine != NULL) {
+ ENGINE_PKEY_ASN1_METHS_PTR asn1meths =
+ ENGINE_get_pkey_asn1_meths(curengine);
+
+ if (asn1meths != NULL) {
+ const int *nids = NULL;
+ int nids_n = asn1meths(curengine, NULL, &nids, 0);
+
+ for (i = 0; i < nids_n; i++) {
+ EVP_PKEY_ASN1_METHOD *ameth2 = NULL;
+ EVP_PKEY *tmp_pkey = NULL;
+ const unsigned char *tmp_blob = blob;
+
+ if (!asn1meths(curengine, &ameth2, NULL, nids[i]))
+ continue;
+ if (ameth2 == NULL
+ || ameth2->pkey_flags & ASN1_PKEY_ALIAS)
+ continue;
+
+ tmp_pkey = d2i_PrivateKey(ameth2->pkey_id, NULL,
+ &tmp_blob, len);
+ if (tmp_pkey != NULL) {
+ if (pkey != NULL)
+ EVP_PKEY_free(tmp_pkey);
+ else
+ pkey = tmp_pkey;
+ (*matchcount)++;
+ }
+ }
+ }
+ curengine = ENGINE_get_next(curengine);
+ }
+#endif
for (i = 0; i < EVP_PKEY_asn1_get_count(); i++) {
EVP_PKEY *tmp_pkey = NULL;
diff --git a/crypto/openssl/crypto/store/store_lib.c b/crypto/openssl/crypto/store/store_lib.c
index fb8184d2d9b5..fb71f84725b1 100644
--- a/crypto/openssl/crypto/store/store_lib.c
+++ b/crypto/openssl/crypto/store/store_lib.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -218,7 +218,11 @@ int OSSL_STORE_eof(OSSL_STORE_CTX *ctx)
int OSSL_STORE_close(OSSL_STORE_CTX *ctx)
{
- int loader_ret = ctx->loader->close(ctx->loader_ctx);
+ int loader_ret;
+
+ if (ctx == NULL)
+ return 1;
+ loader_ret = ctx->loader->close(ctx->loader_ctx);
OPENSSL_free(ctx);
return loader_ret;
diff --git a/crypto/openssl/crypto/ts/ts_rsp_sign.c b/crypto/openssl/crypto/ts/ts_rsp_sign.c
index 041a187da68c..342582f024b2 100644
--- a/crypto/openssl/crypto/ts/ts_rsp_sign.c
+++ b/crypto/openssl/crypto/ts/ts_rsp_sign.c
@@ -57,12 +57,14 @@ static ASN1_INTEGER *def_serial_cb(struct TS_resp_ctx *ctx, void *data)
goto err;
if (!ASN1_INTEGER_set(serial, 1))
goto err;
+
return serial;
err:
TSerr(TS_F_DEF_SERIAL_CB, ERR_R_MALLOC_FAILURE);
TS_RESP_CTX_set_status_info(ctx, TS_STATUS_REJECTION,
"Error during serial number generation.");
+ ASN1_INTEGER_free(serial);
return NULL;
}
diff --git a/crypto/openssl/crypto/ui/ui_openssl.c b/crypto/openssl/crypto/ui/ui_openssl.c
index 168de4630dcc..9526c16536cb 100644
--- a/crypto/openssl/crypto/ui/ui_openssl.c
+++ b/crypto/openssl/crypto/ui/ui_openssl.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2001-2019 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -439,6 +439,16 @@ static int open_console(UI *ui)
is_a_tty = 0;
else
# endif
+# ifdef EPERM
+ /*
+ * Linux can return EPERM (Operation not permitted),
+ * e.g. if a daemon executes openssl via fork()+execve()
+ * This should be ok
+ */
+ if (errno == EPERM)
+ is_a_tty = 0;
+ else
+# endif
# ifdef ENODEV
/*
* MacOS X returns ENODEV (Operation not supported by device),
diff --git a/crypto/openssl/crypto/whrlpool/wp_block.c b/crypto/openssl/crypto/whrlpool/wp_block.c
index c21c04dbc1bb..39ad009c01bf 100644
--- a/crypto/openssl/crypto/whrlpool/wp_block.c
+++ b/crypto/openssl/crypto/whrlpool/wp_block.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2005-2019 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2005-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -63,6 +63,20 @@ typedef unsigned long long u64;
# undef STRICT_ALIGNMENT
#endif
+#ifndef STRICT_ALIGNMENT
+# ifdef __GNUC__
+typedef u64 u64_a1 __attribute((__aligned__(1)));
+# else
+typedef u64 u64_a1;
+# endif
+#endif
+
+#if defined(__GNUC__) && !defined(STRICT_ALIGNMENT)
+typedef u64 u64_aX __attribute((__aligned__(1)));
+#else
+typedef u64 u64_aX;
+#endif
+
#undef SMALL_REGISTER_BANK
#if defined(__i386) || defined(__i386__) || defined(_M_IX86)
# define SMALL_REGISTER_BANK
@@ -191,13 +205,13 @@ typedef unsigned long long u64;
# define LL(c0,c1,c2,c3,c4,c5,c6,c7) c0,c1,c2,c3,c4,c5,c6,c7, \
c0,c1,c2,c3,c4,c5,c6,c7
# define C0(K,i) (((u64*)(Cx.c+0))[2*K.c[(i)*8+0]])
-# define C1(K,i) (((u64*)(Cx.c+7))[2*K.c[(i)*8+1]])
-# define C2(K,i) (((u64*)(Cx.c+6))[2*K.c[(i)*8+2]])
-# define C3(K,i) (((u64*)(Cx.c+5))[2*K.c[(i)*8+3]])
-# define C4(K,i) (((u64*)(Cx.c+4))[2*K.c[(i)*8+4]])
-# define C5(K,i) (((u64*)(Cx.c+3))[2*K.c[(i)*8+5]])
-# define C6(K,i) (((u64*)(Cx.c+2))[2*K.c[(i)*8+6]])
-# define C7(K,i) (((u64*)(Cx.c+1))[2*K.c[(i)*8+7]])
+# define C1(K,i) (((u64_a1*)(Cx.c+7))[2*K.c[(i)*8+1]])
+# define C2(K,i) (((u64_a1*)(Cx.c+6))[2*K.c[(i)*8+2]])
+# define C3(K,i) (((u64_a1*)(Cx.c+5))[2*K.c[(i)*8+3]])
+# define C4(K,i) (((u64_a1*)(Cx.c+4))[2*K.c[(i)*8+4]])
+# define C5(K,i) (((u64_a1*)(Cx.c+3))[2*K.c[(i)*8+5]])
+# define C6(K,i) (((u64_a1*)(Cx.c+2))[2*K.c[(i)*8+6]])
+# define C7(K,i) (((u64_a1*)(Cx.c+1))[2*K.c[(i)*8+7]])
#endif
static const
@@ -531,7 +545,7 @@ void whirlpool_block(WHIRLPOOL_CTX *ctx, const void *inp, size_t n)
} else
# endif
{
- const u64 *pa = (const u64 *)p;
+ const u64_aX *pa = (const u64_aX *)p;
S.q[0] = (K.q[0] = H->q[0]) ^ pa[0];
S.q[1] = (K.q[1] = H->q[1]) ^ pa[1];
S.q[2] = (K.q[2] = H->q[2]) ^ pa[2];
@@ -769,7 +783,7 @@ void whirlpool_block(WHIRLPOOL_CTX *ctx, const void *inp, size_t n)
} else
# endif
{
- const u64 *pa = (const u64 *)p;
+ const u64_aX *pa = (const u64_aX *)p;
H->q[0] ^= S.q[0] ^ pa[0];
H->q[1] ^= S.q[1] ^ pa[1];
H->q[2] ^= S.q[2] ^ pa[2];
diff --git a/crypto/openssl/crypto/x509/x509_err.c b/crypto/openssl/crypto/x509/x509_err.c
index c110d908090e..bdd1e67cd3fd 100644
--- a/crypto/openssl/crypto/x509/x509_err.c
+++ b/crypto/openssl/crypto/x509/x509_err.c
@@ -1,6 +1,6 @@
/*
* Generated by util/mkerr.pl DO NOT EDIT
- * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -79,6 +79,7 @@ static const ERR_STRING_DATA X509_str_functs[] = {
{ERR_PACK(ERR_LIB_X509, X509_F_X509_PRINT_EX_FP, 0), "X509_print_ex_fp"},
{ERR_PACK(ERR_LIB_X509, X509_F_X509_PUBKEY_DECODE, 0),
"x509_pubkey_decode"},
+ {ERR_PACK(ERR_LIB_X509, X509_F_X509_PUBKEY_GET, 0), "X509_PUBKEY_get"},
{ERR_PACK(ERR_LIB_X509, X509_F_X509_PUBKEY_GET0, 0), "X509_PUBKEY_get0"},
{ERR_PACK(ERR_LIB_X509, X509_F_X509_PUBKEY_SET, 0), "X509_PUBKEY_set"},
{ERR_PACK(ERR_LIB_X509, X509_F_X509_REQ_CHECK_PRIVATE_KEY, 0),
diff --git a/crypto/openssl/crypto/x509/x509_local.h b/crypto/openssl/crypto/x509/x509_local.h
index c517a7745637..10807e1def04 100644
--- a/crypto/openssl/crypto/x509/x509_local.h
+++ b/crypto/openssl/crypto/x509/x509_local.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2014-2018 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2014-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -145,3 +145,5 @@ DEFINE_STACK_OF(STACK_OF_X509_NAME_ENTRY)
void x509_set_signature_info(X509_SIG_INFO *siginf, const X509_ALGOR *alg,
const ASN1_STRING *sig);
+int x509_likely_issued(X509 *issuer, X509 *subject);
+int x509_signing_allowed(const X509 *issuer, const X509 *subject);
diff --git a/crypto/openssl/crypto/x509/x509_req.c b/crypto/openssl/crypto/x509/x509_req.c
index 7ba0f26495f9..dd674926ddb5 100644
--- a/crypto/openssl/crypto/x509/x509_req.c
+++ b/crypto/openssl/crypto/x509/x509_req.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -286,6 +286,18 @@ void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig,
*palg = &req->sig_alg;
}
+void X509_REQ_set0_signature(X509_REQ *req, ASN1_BIT_STRING *psig)
+{
+ if (req->signature)
+ ASN1_BIT_STRING_free(req->signature);
+ req->signature = psig;
+}
+
+int X509_REQ_set1_signature_algo(X509_REQ *req, X509_ALGOR *palg)
+{
+ return X509_ALGOR_copy(&req->sig_alg, palg);
+}
+
int X509_REQ_get_signature_nid(const X509_REQ *req)
{
return OBJ_obj2nid(req->sig_alg.algorithm);
diff --git a/crypto/openssl/crypto/x509/x509_txt.c b/crypto/openssl/crypto/x509/x509_txt.c
index 4755b39eb4eb..02bde640d8e8 100644
--- a/crypto/openssl/crypto/x509/x509_txt.c
+++ b/crypto/openssl/crypto/x509/x509_txt.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -174,6 +174,8 @@ const char *X509_verify_cert_error_string(long n)
return "OCSP verification failed";
case X509_V_ERR_OCSP_CERT_UNKNOWN:
return "OCSP unknown cert";
+ case X509_V_ERR_EC_KEY_EXPLICIT_PARAMS:
+ return "Certificate public key has explicit ECC parameters";
default:
/* Printing an error number into a static buffer is not thread-safe */
diff --git a/crypto/openssl/crypto/x509/x509_vfy.c b/crypto/openssl/crypto/x509/x509_vfy.c
index 41625e75ad6a..801055f5a087 100644
--- a/crypto/openssl/crypto/x509/x509_vfy.c
+++ b/crypto/openssl/crypto/x509/x509_vfy.c
@@ -80,6 +80,7 @@ static int get_issuer_sk(X509 **issuer, X509_STORE_CTX *ctx, X509 *x);
static int check_dane_issuer(X509_STORE_CTX *ctx, int depth);
static int check_key_level(X509_STORE_CTX *ctx, X509 *cert);
static int check_sig_level(X509_STORE_CTX *ctx, X509 *cert);
+static int check_curve(X509 *cert);
static int get_crl_score(X509_STORE_CTX *ctx, X509 **pissuer,
unsigned int *preasons, X509_CRL *crl, X509 *x);
@@ -104,7 +105,12 @@ static int null_callback(int ok, X509_STORE_CTX *e)
return ok;
}
-/* Return 1 is a certificate is self signed */
+/*
+ * Return 1 if given cert is considered self-signed, 0 if not or on error.
+ * This does not verify self-signedness but relies on x509v3_cache_extensions()
+ * matching issuer and subject names (i.e., the cert being self-issued) and any
+ * present authority key identifier matching the subject key identifier, etc.
+ */
static int cert_self_signed(X509 *x)
{
if (X509_check_purpose(x, -1, 0) != 1)
@@ -131,10 +137,9 @@ static X509 *lookup_cert_match(X509_STORE_CTX *ctx, X509 *x)
xtmp = sk_X509_value(certs, i);
if (!X509_cmp(xtmp, x))
break;
+ xtmp = NULL;
}
- if (i < sk_X509_num(certs))
- X509_up_ref(xtmp);
- else
+ if (xtmp != NULL && !X509_up_ref(xtmp))
xtmp = NULL;
sk_X509_pop_free(certs, X509_free);
return xtmp;
@@ -267,17 +272,24 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
return -1;
}
+ if (!X509_up_ref(ctx->cert)) {
+ X509err(X509_F_X509_VERIFY_CERT, ERR_R_INTERNAL_ERROR);
+ ctx->error = X509_V_ERR_UNSPECIFIED;
+ return -1;
+ }
+
/*
* first we make sure the chain we are going to build is present and that
* the first entry is in place
*/
- if (((ctx->chain = sk_X509_new_null()) == NULL) ||
- (!sk_X509_push(ctx->chain, ctx->cert))) {
+ if ((ctx->chain = sk_X509_new_null()) == NULL
+ || !sk_X509_push(ctx->chain, ctx->cert)) {
+ X509_free(ctx->cert);
X509err(X509_F_X509_VERIFY_CERT, ERR_R_MALLOC_FAILURE);
ctx->error = X509_V_ERR_OUT_OF_MEM;
return -1;
}
- X509_up_ref(ctx->cert);
+
ctx->num_untrusted = 1;
/* If the peer's public key is too weak, we can stop early. */
@@ -319,30 +331,26 @@ static X509 *find_issuer(X509_STORE_CTX *ctx, STACK_OF(X509) *sk, X509 *x)
return rv;
}
-/* Given a possible certificate and issuer check them */
-
+/*
+ * Check that the given certificate 'x' is issued by the certificate 'issuer'
+ * and the issuer is not yet in ctx->chain, where the exceptional case
+ * that 'x' is self-issued and ctx->chain has just one element is allowed.
+ */
static int check_issued(X509_STORE_CTX *ctx, X509 *x, X509 *issuer)
{
- int ret;
- if (x == issuer)
- return cert_self_signed(x);
- ret = X509_check_issued(issuer, x);
- if (ret == X509_V_OK) {
+ if (x509_likely_issued(issuer, x) != X509_V_OK)
+ return 0;
+ if ((x->ex_flags & EXFLAG_SI) == 0 || sk_X509_num(ctx->chain) != 1) {
int i;
X509 *ch;
- /* Special case: single self signed certificate */
- if (cert_self_signed(x) && sk_X509_num(ctx->chain) == 1)
- return 1;
+
for (i = 0; i < sk_X509_num(ctx->chain); i++) {
ch = sk_X509_value(ctx->chain, i);
- if (ch == issuer || !X509_cmp(ch, issuer)) {
- ret = X509_V_ERR_PATH_LOOP;
- break;
- }
+ if (ch == issuer || X509_cmp(ch, issuer) == 0)
+ return 0;
}
}
-
- return (ret == X509_V_OK);
+ return 1;
}
/* Alternative lookup method: look from a STACK stored in other_ctx */
@@ -350,11 +358,15 @@ static int check_issued(X509_STORE_CTX *ctx, X509 *x, X509 *issuer)
static int get_issuer_sk(X509 **issuer, X509_STORE_CTX *ctx, X509 *x)
{
*issuer = find_issuer(ctx, ctx->other_ctx, x);
- if (*issuer) {
- X509_up_ref(*issuer);
- return 1;
- } else
- return 0;
+
+ if (*issuer == NULL || !X509_up_ref(*issuer))
+ goto err;
+
+ return 1;
+
+ err:
+ *issuer = NULL;
+ return 0;
}
static STACK_OF(X509) *lookup_certs_sk(X509_STORE_CTX *ctx, X509_NAME *nm)
@@ -366,15 +378,21 @@ static STACK_OF(X509) *lookup_certs_sk(X509_STORE_CTX *ctx, X509_NAME *nm)
for (i = 0; i < sk_X509_num(ctx->other_ctx); i++) {
x = sk_X509_value(ctx->other_ctx, i);
if (X509_NAME_cmp(nm, X509_get_subject_name(x)) == 0) {
+ if (!X509_up_ref(x)) {
+ sk_X509_pop_free(sk, X509_free);
+ X509err(X509_F_LOOKUP_CERTS_SK, ERR_R_INTERNAL_ERROR);
+ ctx->error = X509_V_ERR_UNSPECIFIED;
+ return NULL;
+ }
if (sk == NULL)
sk = sk_X509_new_null();
- if (sk == NULL || sk_X509_push(sk, x) == 0) {
+ if (sk == NULL || !sk_X509_push(sk, x)) {
+ X509_free(x);
sk_X509_pop_free(sk, X509_free);
X509err(X509_F_LOOKUP_CERTS_SK, ERR_R_MALLOC_FAILURE);
ctx->error = X509_V_ERR_OUT_OF_MEM;
return NULL;
}
- X509_up_ref(x);
}
}
return sk;
@@ -508,6 +526,14 @@ static int check_chain_extensions(X509_STORE_CTX *ctx)
ret = 1;
break;
}
+ if ((ctx->param->flags & X509_V_FLAG_X509_STRICT) && num > 1) {
+ /* Check for presence of explicit elliptic curve parameters */
+ ret = check_curve(x);
+ if (ret < 0)
+ ctx->error = X509_V_ERR_UNSPECIFIED;
+ else if (ret == 0)
+ ctx->error = X509_V_ERR_EC_KEY_EXPLICIT_PARAMS;
+ }
if ((x->ex_flags & EXFLAG_CA) == 0
&& x->ex_pathlen != -1
&& (ctx->param->flags & X509_V_FLAG_X509_STRICT)) {
@@ -1699,6 +1725,7 @@ int x509_check_cert_time(X509_STORE_CTX *ctx, X509 *x, int depth)
return 1;
}
+/* verify the issuer signatures and cert times of ctx->chain */
static int internal_verify(X509_STORE_CTX *ctx)
{
int n = sk_X509_num(ctx->chain) - 1;
@@ -1717,7 +1744,7 @@ static int internal_verify(X509_STORE_CTX *ctx)
}
if (ctx->check_issued(ctx, xi, xi))
- xs = xi;
+ xs = xi; /* the typical case: last cert in the chain is self-issued */
else {
if (ctx->param->flags & X509_V_FLAG_PARTIAL_CHAIN) {
xs = xi;
@@ -1736,22 +1763,50 @@ static int internal_verify(X509_STORE_CTX *ctx)
* is allowed to reset errors (at its own peril).
*/
while (n >= 0) {
- EVP_PKEY *pkey;
-
/*
- * Skip signature check for self signed certificates unless explicitly
- * asked for. It doesn't add any security and just wastes time. If
- * the issuer's public key is unusable, report the issuer certificate
- * and its depth (rather than the depth of the subject).
+ * For each iteration of this loop:
+ * n is the subject depth
+ * xs is the subject cert, for which the signature is to be checked
+ * xi is the supposed issuer cert containing the public key to use
+ * Initially xs == xi if the last cert in the chain is self-issued.
+ *
+ * Skip signature check for self-signed certificates unless explicitly
+ * asked for because it does not add any security and just wastes time.
*/
- if (xs != xi || (ctx->param->flags & X509_V_FLAG_CHECK_SS_SIGNATURE)) {
+ if (xs != xi || ((ctx->param->flags & X509_V_FLAG_CHECK_SS_SIGNATURE)
+ && (xi->ex_flags & EXFLAG_SS) != 0)) {
+ EVP_PKEY *pkey;
+ /*
+ * If the issuer's public key is not available or its key usage
+ * does not support issuing the subject cert, report the issuer
+ * cert and its depth (rather than n, the depth of the subject).
+ */
+ int issuer_depth = n + (xs == xi ? 0 : 1);
+ /*
+ * According to https://tools.ietf.org/html/rfc5280#section-6.1.4
+ * step (n) we must check any given key usage extension in a CA cert
+ * when preparing the verification of a certificate issued by it.
+ * According to https://tools.ietf.org/html/rfc5280#section-4.2.1.3
+ * we must not verify a certifiate signature if the key usage of the
+ * CA certificate that issued the certificate prohibits signing.
+ * In case the 'issuing' certificate is the last in the chain and is
+ * not a CA certificate but a 'self-issued' end-entity cert (i.e.,
+ * xs == xi && !(xi->ex_flags & EXFLAG_CA)) RFC 5280 does not apply
+ * (see https://tools.ietf.org/html/rfc6818#section-2) and thus
+ * we are free to ignore any key usage restrictions on such certs.
+ */
+ int ret = xs == xi && (xi->ex_flags & EXFLAG_CA) == 0
+ ? X509_V_OK : x509_signing_allowed(xi, xs);
+
+ if (ret != X509_V_OK && !verify_cb_cert(ctx, xi, issuer_depth, ret))
+ return 0;
if ((pkey = X509_get0_pubkey(xi)) == NULL) {
- if (!verify_cb_cert(ctx, xi, xi != xs ? n+1 : n,
- X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY))
+ ret = X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY;
+ if (!verify_cb_cert(ctx, xi, issuer_depth, ret))
return 0;
} else if (X509_verify(xs, pkey) <= 0) {
- if (!verify_cb_cert(ctx, xs, n,
- X509_V_ERR_CERT_SIGNATURE_FAILURE))
+ ret = X509_V_ERR_CERT_SIGNATURE_FAILURE;
+ if (!verify_cb_cert(ctx, xs, n, ret))
return 0;
}
}
@@ -3158,7 +3213,16 @@ static int build_chain(X509_STORE_CTX *ctx)
/* Drop this issuer from future consideration */
(void) sk_X509_delete_ptr(sktmp, xtmp);
+ if (!X509_up_ref(xtmp)) {
+ X509err(X509_F_BUILD_CHAIN, ERR_R_INTERNAL_ERROR);
+ trust = X509_TRUST_REJECTED;
+ ctx->error = X509_V_ERR_UNSPECIFIED;
+ search = 0;
+ continue;
+ }
+
if (!sk_X509_push(ctx->chain, xtmp)) {
+ X509_free(xtmp);
X509err(X509_F_BUILD_CHAIN, ERR_R_MALLOC_FAILURE);
trust = X509_TRUST_REJECTED;
ctx->error = X509_V_ERR_OUT_OF_MEM;
@@ -3166,7 +3230,7 @@ static int build_chain(X509_STORE_CTX *ctx)
continue;
}
- X509_up_ref(x = xtmp);
+ x = xtmp;
++ctx->num_untrusted;
ss = cert_self_signed(xtmp);
@@ -3258,6 +3322,32 @@ static int check_key_level(X509_STORE_CTX *ctx, X509 *cert)
}
/*
+ * Check whether the public key of ``cert`` does not use explicit params
+ * for an elliptic curve.
+ *
+ * Returns 1 on success, 0 if check fails, -1 for other errors.
+ */
+static int check_curve(X509 *cert)
+{
+#ifndef OPENSSL_NO_EC
+ EVP_PKEY *pkey = X509_get0_pubkey(cert);
+
+ /* Unsupported or malformed key */
+ if (pkey == NULL)
+ return -1;
+
+ if (EVP_PKEY_id(pkey) == EVP_PKEY_EC) {
+ int ret;
+
+ ret = EC_KEY_decoded_from_explicit_params(EVP_PKEY_get0_EC_KEY(pkey));
+ return ret < 0 ? ret : !ret;
+ }
+#endif
+
+ return 1;
+}
+
+/*
* Check whether the signature digest algorithm of ``cert`` meets the security
* level of ``ctx``. Should not be checked for trust anchors (whether
* self-signed or otherwise).
diff --git a/crypto/openssl/crypto/x509/x_pubkey.c b/crypto/openssl/crypto/x509/x_pubkey.c
index 4f694b93fb00..9be7e9286571 100644
--- a/crypto/openssl/crypto/x509/x_pubkey.c
+++ b/crypto/openssl/crypto/x509/x_pubkey.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -169,8 +169,11 @@ EVP_PKEY *X509_PUBKEY_get0(X509_PUBKEY *key)
EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key)
{
EVP_PKEY *ret = X509_PUBKEY_get0(key);
- if (ret != NULL)
- EVP_PKEY_up_ref(ret);
+
+ if (ret != NULL && !EVP_PKEY_up_ref(ret)) {
+ X509err(X509_F_X509_PUBKEY_GET, ERR_R_INTERNAL_ERROR);
+ ret = NULL;
+ }
return ret;
}
diff --git a/crypto/openssl/crypto/x509v3/pcy_data.c b/crypto/openssl/crypto/x509v3/pcy_data.c
index 073505951322..8c7bc69576a4 100644
--- a/crypto/openssl/crypto/x509v3/pcy_data.c
+++ b/crypto/openssl/crypto/x509v3/pcy_data.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2004-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -52,6 +52,7 @@ X509_POLICY_DATA *policy_data_new(POLICYINFO *policy,
ret = OPENSSL_zalloc(sizeof(*ret));
if (ret == NULL) {
X509V3err(X509V3_F_POLICY_DATA_NEW, ERR_R_MALLOC_FAILURE);
+ ASN1_OBJECT_free(id);
return NULL;
}
ret->expected_policy_set = sk_ASN1_OBJECT_new_null();
diff --git a/crypto/openssl/crypto/x509v3/v3_alt.c b/crypto/openssl/crypto/x509v3/v3_alt.c
index 7ac2911b91af..4dce0041012e 100644
--- a/crypto/openssl/crypto/x509v3/v3_alt.c
+++ b/crypto/openssl/crypto/x509v3/v3_alt.c
@@ -1,5 +1,5 @@
/*
- * Copyright 1999-2019 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 1999-2020 The OpenSSL Project Authors. All Rights Reserved.
*
* Licensed under the OpenSSL license (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
@@ -275,6 +275,7 @@ static int copy_issuer(X509V3_CTX *ctx, GENERAL_NAMES *gens)
num = sk_GENERAL_NAME_num(ialt);
if (!sk_GENERAL_NAME_reserve(gens, num)) {
X509V3err(X509V3_F_COPY_ISSUER, ERR_R_MALLOC_FAILURE);
+ sk_GENERAL_NAME_free(ialt);
goto err;
}
diff --git a/crypto/openssl/crypto/x509v3/v3_purp.c b/crypto/openssl/crypto/x509v3/v3_purp.c
index f023c6489548..2b06dba05398 100644
--- a/crypto/openssl/crypto/x509v3/v3_purp.c
+++ b/crypto/openssl/crypto/x509v3/v3_purp.c
@@ -13,6 +13,7 @@
#include <openssl/x509v3.h>
#include <openssl/x509_vfy.h>
#include "crypto/x509.h"
+#include "../x509/x509_local.h" /* for x509_signing_allowed() */
#include "internal/tsan_assist.h"
static void x509v3_cache_extensions(X509 *x);
@@ -344,6 +345,21 @@ static int setup_crldp(X509 *x)
return 1;
}
+/* Check that issuer public key algorithm matches subject signature algorithm */
+static int check_sig_alg_match(const EVP_PKEY *pkey, const X509 *subject)
+{
+ int pkey_nid;
+
+ if (pkey == NULL)
+ return X509_V_ERR_NO_ISSUER_PUBLIC_KEY;
+ if (OBJ_find_sigid_algs(OBJ_obj2nid(subject->cert_info.signature.algorithm),
+ NULL, &pkey_nid) == 0)
+ return X509_V_ERR_UNSUPPORTED_SIGNATURE_ALGORITHM;
+ if (EVP_PKEY_type(pkey_nid) != EVP_PKEY_base_id(pkey))
+ return X509_V_ERR_SIGNATURE_ALGORITHM_MISMATCH;
+ return X509_V_OK;
+}
+
#define V1_ROOT (EXFLAG_V1|EXFLAG_SS)
#define ku_reject(x, usage) \
(((x)->ex_flags & EXFLAG_KUSAGE) && !((x)->ex_kusage & (usage)))
@@ -496,11 +512,11 @@ static void x509v3_cache_extensions(X509 *x)
x->ex_flags |= EXFLAG_INVALID;
/* Does subject name match issuer ? */
if (!X509_NAME_cmp(X509_get_subject_name(x), X509_get_issuer_name(x))) {
- x->ex_flags |= EXFLAG_SI;
- /* If SKID matches AKID also indicate self signed */
- if (X509_check_akid(x, x->akid) == X509_V_OK &&
- !ku_reject(x, KU_KEY_CERT_SIGN))
- x->ex_flags |= EXFLAG_SS;
+ x->ex_flags |= EXFLAG_SI; /* cert is self-issued */
+ if (X509_check_akid(x, x->akid) == X509_V_OK /* SKID matches AKID */
+ /* .. and the signature alg matches the PUBKEY alg: */
+ && check_sig_alg_match(X509_get0_pubkey(x), x) == X509_V_OK)
+ x->ex_flags |= EXFLAG_SS; /* indicate self-signed */
}
x->altname = X509_get_ext_d2i(x, NID_subject_alt_name, &i, NULL);
if (x->altname == NULL && i != -1)
@@ -793,6 +809,23 @@ static int no_check(const X509_PURPOSE *xp, const X509 *x, int ca)
}
/*-
+ * Check if certificate I<issuer> is allowed to issue certificate I<subject>
+ * according to the B<keyUsage> field of I<issuer> if present
+ * depending on any proxyCertInfo extension of I<subject>.
+ * Returns 0 for OK, or positive for reason for rejection
+ * where reason codes match those for X509_verify_cert().
+ */
+int x509_signing_allowed(const X509 *issuer, const X509 *subject)
+{
+ if (subject->ex_flags & EXFLAG_PROXY) {
+ if (ku_reject(issuer, KU_DIGITAL_SIGNATURE))
+ return X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE;
+ } else if (ku_reject(issuer, KU_KEY_CERT_SIGN))
+ return X509_V_ERR_KEYUSAGE_NO_CERTSIGN;
+ return X509_V_OK;
+}
+
+/*-
* Various checks to see if one certificate issued the second.
* This can be used to prune a set of possible issuer certificates
* which have been looked up using some simple method such as by
@@ -800,13 +833,24 @@ static int no_check(const X509_PURPOSE *xp, const X509 *x, int ca)
* These are:
* 1. Check issuer_name(subject) == subject_name(issuer)
* 2. If akid(subject) exists check it matches issuer
- * 3. If key_usage(issuer) exists check it supports certificate signing
+ * 3. Check that issuer public key algorithm matches subject signature algorithm
+ * 4. If key_usage(issuer) exists check it supports certificate signing
* returns 0 for OK, positive for reason for mismatch, reasons match
* codes for X509_verify_cert()
*/
int X509_check_issued(X509 *issuer, X509 *subject)
{
+ int ret;
+
+ if ((ret = x509_likely_issued(issuer, subject)) != X509_V_OK)
+ return ret;
+ return x509_signing_allowed(issuer, subject);
+}
+
+/* do the checks 1., 2., and 3. as described above for X509_check_issued() */
+int x509_likely_issued(X509 *issuer, X509 *subject)
+{
if (X509_NAME_cmp(X509_get_subject_name(issuer),
X509_get_issuer_name(subject)))
return X509_V_ERR_SUBJECT_ISSUER_MISMATCH;
@@ -824,12 +868,8 @@ int X509_check_issued(X509 *issuer, X509 *subject)
return ret;
}
- if (subject->ex_flags & EXFLAG_PROXY) {
- if (ku_reject(issuer, KU_DIGITAL_SIGNATURE))
- return X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE;
- } else if (ku_reject(issuer, KU_KEY_CERT_SIGN))
- return X509_V_ERR_KEYUSAGE_NO_CERTSIGN;
- return X509_V_OK;
+ /* check if the subject signature alg matches the issuer's PUBKEY alg */
+ return check_sig_alg_match(X509_get0_pubkey(issuer), subject);
}
int X509_check_akid(X509 *issuer, AUTHORITY_KEYID *akid)
diff --git a/crypto/openssl/doc/man1/CA.pl.pod b/crypto/openssl/doc/man1/CA.pl.pod
index 6949ec6228ac..4e8958e554dd 100644
--- a/crypto/openssl/doc/man1/CA.pl.pod
+++ b/crypto/openssl/doc/man1/CA.pl.pod
@@ -91,7 +91,7 @@ to standard output. Leverages B<openssl ca> command.
=item B<-signCA>
-This option is the same as the B<-signreq> option except it uses the
+This option is the same as the B<-sign> option except it uses the
configuration file section B<v3_ca> and so makes the signed request a
valid CA certificate. This is useful when creating intermediate CA from
a root CA. Extra params are passed on to B<openssl ca> command.
@@ -143,7 +143,7 @@ the request and finally create a PKCS#12 file containing it.
CA.pl -newca
CA.pl -newreq
- CA.pl -signreq
+ CA.pl -sign
CA.pl -pkcs12 "My Test Certificate"
=head1 DSA CERTIFICATES
@@ -164,7 +164,7 @@ Create the CA directories and files:
CA.pl -newca
-enter cacert.pem when prompted for the CA file name.
+enter cacert.pem when prompted for the CA filename.
Create a DSA certificate request and private key (a different set of parameters
can optionally be created first):
@@ -173,7 +173,7 @@ can optionally be created first):
Sign the request:
- CA.pl -signreq
+ CA.pl -sign
=head1 NOTES
@@ -204,7 +204,7 @@ L<config(5)>
=head1 COPYRIGHT
-Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man1/ca.pod b/crypto/openssl/doc/man1/ca.pod
index 27bb31493a7f..159d9d812565 100644
--- a/crypto/openssl/doc/man1/ca.pod
+++ b/crypto/openssl/doc/man1/ca.pod
@@ -219,7 +219,7 @@ DNs match the order of the request. This is not needed for Xenroll.
=item B<-noemailDN>
The DN of a certificate can contain the EMAIL field if present in the
-request DN, however it is good policy just having the e-mail set into
+request DN, however, it is good policy just having the e-mail set into
the altName extension of the certificate. When this option is set the
EMAIL field is removed from the certificate' subject and set only in
the, eventually present, extensions. The B<email_in_dn> keyword can be
@@ -759,7 +759,7 @@ L<config(5)>, L<x509v3_config(5)>
=head1 COPYRIGHT
-Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man1/dgst.pod b/crypto/openssl/doc/man1/dgst.pod
index ea2c4e3e1598..4c6034cdd6ce 100644
--- a/crypto/openssl/doc/man1/dgst.pod
+++ b/crypto/openssl/doc/man1/dgst.pod
@@ -94,8 +94,7 @@ Filename to output to, or standard output by default.
=item B<-sign filename>
Digitally sign the digest using the private key in "filename". Note this option
-does not support Ed25519 or Ed448 private keys. Use the B<pkeyutl> command
-instead for this.
+does not support Ed25519 or Ed448 private keys.
=item B<-keyform arg>
@@ -242,7 +241,7 @@ The FIPS-related options were removed in OpenSSL 1.1.0.
=head1 COPYRIGHT
-Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man1/enc.pod b/crypto/openssl/doc/man1/enc.pod
index 6f20ac1fc7d5..7bba89ee0783 100644
--- a/crypto/openssl/doc/man1/enc.pod
+++ b/crypto/openssl/doc/man1/enc.pod
@@ -240,7 +240,7 @@ a strong block cipher, such as AES, in CBC mode.
All the block ciphers normally use PKCS#5 padding, also known as standard
block padding. This allows a rudimentary integrity or password check to
-be performed. However since the chance of random data passing the test
+be performed. However, since the chance of random data passing the test
is better than 1 in 256 it isn't a very good test.
If padding is disabled then the input data must be a multiple of the cipher
@@ -428,7 +428,7 @@ The B<-list> option was added in OpenSSL 1.1.1e.
=head1 COPYRIGHT
-Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man1/ocsp.pod b/crypto/openssl/doc/man1/ocsp.pod
index 736055b1b669..1f724b42bde4 100644
--- a/crypto/openssl/doc/man1/ocsp.pod
+++ b/crypto/openssl/doc/man1/ocsp.pod
@@ -176,7 +176,7 @@ Specify the responder URL. Both HTTP and HTTPS (SSL/TLS) URLs can be specified.
=item B<-host hostname:port>, B<-path pathname>
If the B<host> option is present then the OCSP request is sent to the host
-B<hostname> on port B<port>. B<path> specifies the HTTP path name to use
+B<hostname> on port B<port>. B<path> specifies the HTTP pathname to use
or "/" by default. This is equivalent to specifying B<-url> with scheme
http:// and the given hostname, port, and pathname.
@@ -490,7 +490,7 @@ The -no_alt_chains option was added in OpenSSL 1.1.0.
=head1 COPYRIGHT
-Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man1/pkcs12.pod b/crypto/openssl/doc/man1/pkcs12.pod
index da887a469978..fdaf6e49cd1d 100644
--- a/crypto/openssl/doc/man1/pkcs12.pod
+++ b/crypto/openssl/doc/man1/pkcs12.pod
@@ -245,7 +245,7 @@ This option is only interpreted by MSIE and similar MS software. Normally
encryption purposes but arbitrary length keys for signing. The B<-keysig>
option marks the key for signing only. Signing only keys can be used for
S/MIME signing, authenticode (ActiveX control signing) and SSL client
-authentication, however due to a bug only MSIE 5.0 and later support
+authentication, however, due to a bug only MSIE 5.0 and later support
the use of signing only keys for SSL client authentication.
=item B<-macalg digest>
@@ -383,7 +383,7 @@ L<pkcs8(1)>
=head1 COPYRIGHT
-Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man1/pkcs8.pod b/crypto/openssl/doc/man1/pkcs8.pod
index b079885d2fc7..9efc8bc11e77 100644
--- a/crypto/openssl/doc/man1/pkcs8.pod
+++ b/crypto/openssl/doc/man1/pkcs8.pod
@@ -285,7 +285,7 @@ one million iterations of the password:
Test vectors from this PKCS#5 v2.0 implementation were posted to the
pkcs-tng mailing list using triple DES, DES and RC2 with high iteration
counts, several people confirmed that they could decrypt the private
-keys produced and Therefore it can be assumed that the PKCS#5 v2.0
+keys produced and therefore, it can be assumed that the PKCS#5 v2.0
implementation is reasonably accurate at least as far as these
algorithms are concerned.
@@ -309,7 +309,7 @@ The B<-iter> option was added in OpenSSL 1.1.0.
=head1 COPYRIGHT
-Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man1/pkeyutl.pod b/crypto/openssl/doc/man1/pkeyutl.pod
index dffc449a4e0e..ae24fdc10045 100644
--- a/crypto/openssl/doc/man1/pkeyutl.pod
+++ b/crypto/openssl/doc/man1/pkeyutl.pod
@@ -38,7 +38,7 @@ B<openssl> B<pkeyutl>
=head1 DESCRIPTION
-The B<pkeyutl> command can be used to perform low level public key operations
+The B<pkeyutl> command can be used to perform low-level public key operations
using any supported algorithm.
=head1 OPTIONS
@@ -327,7 +327,7 @@ L<EVP_PKEY_CTX_set_hkdf_md(3)>, L<EVP_PKEY_CTX_set_tls1_prf_md(3)>
=head1 COPYRIGHT
-Copyright 2006-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man1/s_client.pod b/crypto/openssl/doc/man1/s_client.pod
index 68a152a272bd..132778b4d907 100644
--- a/crypto/openssl/doc/man1/s_client.pod
+++ b/crypto/openssl/doc/man1/s_client.pod
@@ -427,11 +427,11 @@ File to send output of B<-msg> or B<-trace> to, default standard output.
=item B<-nbio_test>
-Tests non-blocking I/O
+Tests nonblocking I/O
=item B<-nbio>
-Turns on non-blocking I/O
+Turns on nonblocking I/O
=item B<-crlf>
@@ -781,14 +781,14 @@ is that a web client complains it has no certificates or gives an empty
list to choose from. This is normally because the server is not sending
the clients certificate authority in its "acceptable CA list" when it
requests a certificate. By using B<s_client> the CA list can be viewed
-and checked. However some servers only request client authentication
+and checked. However, some servers only request client authentication
after a specific URL is requested. To obtain the list in this case it
is necessary to use the B<-prexit> option and send an HTTP request
for an appropriate page.
If a certificate is specified on the command line using the B<-cert>
option it will not be used unless the server specifically requests
-a client certificate. Therefor merely including a client certificate
+a client certificate. Therefore, merely including a client certificate
on the command line is no guarantee that the certificate works.
If there are problems verifying a server certificate then the
diff --git a/crypto/openssl/doc/man1/s_server.pod b/crypto/openssl/doc/man1/s_server.pod
index 7fa382a8ae33..c78a677abcfc 100644
--- a/crypto/openssl/doc/man1/s_server.pod
+++ b/crypto/openssl/doc/man1/s_server.pod
@@ -432,9 +432,9 @@ used in conjunction with B<-early_data>.
=item B<-id_prefix val>
Generate SSL/TLS session IDs prefixed by B<val>. This is mostly useful
-for testing any SSL/TLS code (eg. proxies) that wish to deal with multiple
+for testing any SSL/TLS code (e.g. proxies) that wish to deal with multiple
servers, when each of which might be generating a unique range of session
-IDs (eg. with a certain prefix).
+IDs (e.g. with a certain prefix).
=item B<-rand file...>
@@ -845,7 +845,7 @@ The
=head1 COPYRIGHT
-Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man1/s_time.pod b/crypto/openssl/doc/man1/s_time.pod
index e1a3bef41cfc..1085bfbbb44b 100644
--- a/crypto/openssl/doc/man1/s_time.pod
+++ b/crypto/openssl/doc/man1/s_time.pod
@@ -177,14 +177,14 @@ is that a web client complains it has no certificates or gives an empty
list to choose from. This is normally because the server is not sending
the clients certificate authority in its "acceptable CA list" when it
requests a certificate. By using L<s_client(1)> the CA list can be
-viewed and checked. However some servers only request client authentication
+viewed and checked. However, some servers only request client authentication
after a specific URL is requested. To obtain the list in this case it
is necessary to use the B<-prexit> option of L<s_client(1)> and
send an HTTP request for an appropriate page.
If a certificate is specified on the command line using the B<-cert>
option it will not be used unless the server specifically requests
-a client certificate. Therefor merely including a client certificate
+a client certificate. Therefore, merely including a client certificate
on the command line is no guarantee that the certificate works.
=head1 BUGS
diff --git a/crypto/openssl/doc/man1/sess_id.pod b/crypto/openssl/doc/man1/sess_id.pod
index 6c54ed988bbe..543b5b7de7ff 100644
--- a/crypto/openssl/doc/man1/sess_id.pod
+++ b/crypto/openssl/doc/man1/sess_id.pod
@@ -142,7 +142,7 @@ The PEM encoded session format uses the header and footer lines:
Since the SSL session output contains the master key it is
possible to read the contents of an encrypted session using this
-information. Therefore appropriate security precautions should be taken if
+information. Therefore, appropriate security precautions should be taken if
the information is being output by a "real" application. This is however
strongly discouraged and should only be used for debugging purposes.
diff --git a/crypto/openssl/doc/man1/ts.pod b/crypto/openssl/doc/man1/ts.pod
index ec57ec7ebbd4..ee700a8f6ea4 100644
--- a/crypto/openssl/doc/man1/ts.pod
+++ b/crypto/openssl/doc/man1/ts.pod
@@ -101,23 +101,23 @@ the hash to the TSA.
=item 2.
The TSA attaches the current date and time to the received hash value,
-signs them and sends the time stamp token back to the client. By
+signs them and sends the timestamp token back to the client. By
creating this token the TSA certifies the existence of the original
data file at the time of response generation.
=item 3.
-The TSA client receives the time stamp token and verifies the
+The TSA client receives the timestamp token and verifies the
signature on it. It also checks if the token contains the same hash
value that it had sent to the TSA.
=back
-There is one DER encoded protocol data unit defined for transporting a time
-stamp request to the TSA and one for sending the time stamp response
+There is one DER encoded protocol data unit defined for transporting
+a timestamp request to the TSA and one for sending the timestamp response
back to the client. The B<ts> command has three main functions:
-creating a time stamp request based on a data file,
-creating a time stamp response based on a request, verifying if a
+creating a timestamp request based on a data file,
+creating a timestamp response based on a request, verifying if a
response corresponds to a particular request or a data file.
There is no support for sending the requests/responses automatically
@@ -128,7 +128,7 @@ requests either by ftp or e-mail.
=head2 Time Stamp Request generation
-The B<-query> switch can be used for creating and printing a time stamp
+The B<-query> switch can be used for creating and printing a timestamp
request with the following options:
=over 4
@@ -154,7 +154,7 @@ see L<openssl(1)/COMMAND SUMMARY>.
=item B<-data> file_to_hash
-The data file for which the time stamp request needs to be
+The data file for which the timestamp request needs to be
created. stdin is the default if neither the B<-data> nor the B<-digest>
parameter is specified. (Optional)
@@ -175,7 +175,7 @@ The default is SHA-1. (Optional)
=item B<-tspolicy> object_id
The policy that the client expects the TSA to use for creating the
-time stamp token. Either the dotted OID notation or OID names defined
+timestamp token. Either the dotted OID notation or OID names defined
in the config file can be used. If no policy is requested the TSA will
use its own default policy. (Optional)
@@ -193,7 +193,7 @@ response. (Optional)
=item B<-in> request.tsq
-This option specifies a previously created time stamp request in DER
+This option specifies a previously created timestamp request in DER
format that will be printed into the output file. Useful when you need
to examine the content of a request in human-readable
format. (Optional)
@@ -212,13 +212,13 @@ instead of DER. (Optional)
=head2 Time Stamp Response generation
-A time stamp response (TimeStampResp) consists of a response status
-and the time stamp token itself (ContentInfo), if the token generation was
-successful. The B<-reply> command is for creating a time stamp
-response or time stamp token based on a request and printing the
+A timestamp response (TimeStampResp) consists of a response status
+and the timestamp token itself (ContentInfo), if the token generation was
+successful. The B<-reply> command is for creating a timestamp
+response or timestamp token based on a request and printing the
response/token in human-readable format. If B<-token_out> is not
-specified the output is always a time stamp response (TimeStampResp),
-otherwise it is a time stamp token (ContentInfo).
+specified the output is always a timestamp response (TimeStampResp),
+otherwise it is a timestamp token (ContentInfo).
=over 4
@@ -237,7 +237,7 @@ used, see B<CONFIGURATION FILE OPTIONS> for details. (Optional)
=item B<-queryfile> request.tsq
-The name of the file containing a DER encoded time stamp request. (Optional)
+The name of the file containing a DER encoded timestamp request. (Optional)
=item B<-passin> password_src
@@ -282,19 +282,19 @@ B<default_policy> config file option. (Optional)
=item B<-in> response.tsr
-Specifies a previously created time stamp response or time stamp token
+Specifies a previously created timestamp response or timestamp token
(if B<-token_in> is also specified) in DER format that will be written
to the output file. This option does not require a request, it is
useful e.g. when you need to examine the content of a response or
-token or you want to extract the time stamp token from a response. If
-the input is a token and the output is a time stamp response a default
+token or you want to extract the timestamp token from a response. If
+the input is a token and the output is a timestamp response a default
'granted' status info is added to the token. (Optional)
=item B<-token_in>
This flag can be used together with the B<-in> option and indicates
-that the input is a DER encoded time stamp token (ContentInfo) instead
-of a time stamp response (TimeStampResp). (Optional)
+that the input is a DER encoded timestamp token (ContentInfo) instead
+of a timestamp response (TimeStampResp). (Optional)
=item B<-out> response.tsr
@@ -304,7 +304,7 @@ stdout. (Optional)
=item B<-token_out>
-The output is a time stamp token (ContentInfo) instead of time stamp
+The output is a timestamp token (ContentInfo) instead of timestamp
response (TimeStampResp). (Optional)
=item B<-text>
@@ -323,8 +323,8 @@ for all available algorithms. Default is builtin. (Optional)
=head2 Time Stamp Response verification
-The B<-verify> command is for verifying if a time stamp response or time
-stamp token is valid and matches a particular time stamp request or
+The B<-verify> command is for verifying if a timestamp response or
+timestamp token is valid and matches a particular timestamp request or
data file. The B<-verify> command does not use the configuration file.
=over 4
@@ -345,18 +345,18 @@ specified with this one. (Optional)
=item B<-queryfile> request.tsq
-The original time stamp request in DER format. The B<-data> and B<-digest>
+The original timestamp request in DER format. The B<-data> and B<-digest>
options must not be specified with this one. (Optional)
=item B<-in> response.tsr
-The time stamp response that needs to be verified in DER format. (Mandatory)
+The timestamp response that needs to be verified in DER format. (Mandatory)
=item B<-token_in>
This flag can be used together with the B<-in> option and indicates
-that the input is a DER encoded time stamp token (ContentInfo) instead
-of a time stamp response (TimeStampResp). (Optional)
+that the input is a DER encoded timestamp token (ContentInfo) instead
+of a timestamp response (TimeStampResp). (Optional)
=item B<-CApath> trusted_cert_path
@@ -430,7 +430,7 @@ See L<ca(1)> for description. (Optional)
=item B<serial>
The name of the file containing the hexadecimal serial number of the
-last time stamp response created. This number is incremented by 1 for
+last timestamp response created. This number is incremented by 1 for
each response. If the file does not exist at the time of response
generation a new file is created with serial number 1. (Mandatory)
@@ -487,7 +487,7 @@ the components is missing zero is assumed for that field. (Optional)
=item B<clock_precision_digits>
Specifies the maximum number of digits, which represent the fraction of
-seconds, that need to be included in the time field. The trailing zeroes
+seconds, that need to be included in the time field. The trailing zeros
must be removed from the time, so there might actually be fewer digits,
or no fraction of seconds at all. Supported only on UNIX platforms.
The maximum value is 6, default is 0.
@@ -530,13 +530,13 @@ openssl/apps/openssl.cnf will do.
=head2 Time Stamp Request
-To create a time stamp request for design1.txt with SHA-1
+To create a timestamp request for design1.txt with SHA-1
without nonce and policy and no certificate is required in the response:
openssl ts -query -data design1.txt -no_nonce \
-out design1.tsq
-To create a similar time stamp request with specifying the message imprint
+To create a similar timestamp request with specifying the message imprint
explicitly:
openssl ts -query -digest b7e5d3f93198b38379852f2c04e78d73abdd0f4b \
@@ -546,7 +546,7 @@ To print the content of the previous request in human readable format:
openssl ts -query -in design1.tsq -text
-To create a time stamp request which includes the MD-5 digest
+To create a timestamp request which includes the MD-5 digest
of design2.txt, requests the signer certificate and nonce,
specifies a policy id (assuming the tsa_policy1 name is defined in the
OID section of the config file):
@@ -568,7 +568,7 @@ below assume that cacert.pem contains the certificate of the CA,
tsacert.pem is the signing certificate issued by cacert.pem and
tsakey.pem is the private key of the TSA.
-To create a time stamp response for a request:
+To create a timestamp response for a request:
openssl ts -reply -queryfile design1.tsq -inkey tsakey.pem \
-signer tsacert.pem -out design1.tsr
@@ -577,44 +577,44 @@ If you want to use the settings in the config file you could just write:
openssl ts -reply -queryfile design1.tsq -out design1.tsr
-To print a time stamp reply to stdout in human readable format:
+To print a timestamp reply to stdout in human readable format:
openssl ts -reply -in design1.tsr -text
-To create a time stamp token instead of time stamp response:
+To create a timestamp token instead of timestamp response:
openssl ts -reply -queryfile design1.tsq -out design1_token.der -token_out
-To print a time stamp token to stdout in human readable format:
+To print a timestamp token to stdout in human readable format:
openssl ts -reply -in design1_token.der -token_in -text -token_out
-To extract the time stamp token from a response:
+To extract the timestamp token from a response:
openssl ts -reply -in design1.tsr -out design1_token.der -token_out
-To add 'granted' status info to a time stamp token thereby creating a
+To add 'granted' status info to a timestamp token thereby creating a
valid response:
openssl ts -reply -in design1_token.der -token_in -out design1.tsr
=head2 Time Stamp Verification
-To verify a time stamp reply against a request:
+To verify a timestamp reply against a request:
openssl ts -verify -queryfile design1.tsq -in design1.tsr \
-CAfile cacert.pem -untrusted tsacert.pem
-To verify a time stamp reply that includes the certificate chain:
+To verify a timestamp reply that includes the certificate chain:
openssl ts -verify -queryfile design2.tsq -in design2.tsr \
-CAfile cacert.pem
-To verify a time stamp token against the original data file:
+To verify a timestamp token against the original data file:
openssl ts -verify -data design2.txt -in design2.tsr \
-CAfile cacert.pem
-To verify a time stamp token against a message imprint:
+To verify a timestamp token against a message imprint:
openssl ts -verify -digest b7e5d3f93198b38379852f2c04e78d73abdd0f4b \
-in design2.tsr -CAfile cacert.pem
@@ -628,7 +628,7 @@ You could also look at the 'test' directory for more examples.
=item *
-No support for time stamps over SMTP, though it is quite easy
+No support for timestamps over SMTP, though it is quite easy
to implement an automatic e-mail based TSA with L<procmail(1)>
and L<perl(1)>. HTTP server support is provided in the form of
a separate apache module. HTTP client support is provided by
@@ -638,7 +638,7 @@ L<tsget(1)>. Pure TCP/IP protocol is not supported.
The file containing the last serial number of the TSA is not
locked when being read or written. This is a problem if more than one
-instance of L<openssl(1)> is trying to create a time stamp
+instance of L<openssl(1)> is trying to create a timestamp
response at the same time. This is not an issue when using the apache
server module, it does proper locking.
@@ -665,7 +665,7 @@ L<config(5)>
=head1 COPYRIGHT
-Copyright 2006-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man1/tsget.pod b/crypto/openssl/doc/man1/tsget.pod
index 43bf2c7e35ac..8fe417f2a06f 100644
--- a/crypto/openssl/doc/man1/tsget.pod
+++ b/crypto/openssl/doc/man1/tsget.pod
@@ -24,15 +24,15 @@ B<-h> server_url
=head1 DESCRIPTION
-The B<tsget> command can be used for sending a time stamp request, as
-specified in B<RFC 3161>, to a time stamp server over HTTP or HTTPS and storing
-the time stamp response in a file. This tool cannot be used for creating the
+The B<tsget> command can be used for sending a timestamp request, as
+specified in B<RFC 3161>, to a timestamp server over HTTP or HTTPS and storing
+the timestamp response in a file. This tool cannot be used for creating the
requests and verifying responses, you can use the OpenSSL B<ts(1)> command to
do that. B<tsget> can send several requests to the server without closing
the TCP connection if more than one requests are specified on the command
line.
-The tool sends the following HTTP request for each time stamp request:
+The tool sends the following HTTP request for each timestamp request:
POST url HTTP/1.1
User-Agent: OpenTSA tsget.pl/<version>
@@ -53,7 +53,7 @@ written to a file without any interpretation.
=item B<-h> server_url
-The URL of the HTTP/HTTPS server listening for time stamp requests.
+The URL of the HTTP/HTTPS server listening for timestamp requests.
=item B<-e> extension
@@ -64,8 +64,8 @@ the input files. Default extension is '.tsr'. (Optional)
=item B<-o> output
This option can be specified only when just one request is sent to the
-server. The time stamp response will be written to the given output file. '-'
-means standard output. In case of multiple time stamp requests or the absence
+server. The timestamp response will be written to the given output file. '-'
+means standard output. In case of multiple timestamp requests or the absence
of this argument the names of the output files will be derived from the names
of the input files and the default or specified extension argument. (Optional)
@@ -124,7 +124,7 @@ The name of an EGD socket to get random data from. (Optional)
=item [request]...
-List of files containing B<RFC 3161> DER-encoded time stamp requests. If no
+List of files containing B<RFC 3161> DER-encoded timestamp requests. If no
requests are specified only one request will be sent to the server and it will be
read from the standard input. (Optional)
@@ -139,35 +139,35 @@ arguments.
=head1 EXAMPLES
The examples below presume that B<file1.tsq> and B<file2.tsq> contain valid
-time stamp requests, tsa.opentsa.org listens at port 8080 for HTTP requests
+timestamp requests, tsa.opentsa.org listens at port 8080 for HTTP requests
and at port 8443 for HTTPS requests, the TSA service is available at the /tsa
absolute path.
-Get a time stamp response for file1.tsq over HTTP, output is written to
+Get a timestamp response for file1.tsq over HTTP, output is written to
file1.tsr:
tsget -h http://tsa.opentsa.org:8080/tsa file1.tsq
-Get a time stamp response for file1.tsq and file2.tsq over HTTP showing
+Get a timestamp response for file1.tsq and file2.tsq over HTTP showing
progress, output is written to file1.reply and file2.reply respectively:
tsget -h http://tsa.opentsa.org:8080/tsa -v -e .reply \
file1.tsq file2.tsq
-Create a time stamp request, write it to file3.tsq, send it to the server and
+Create a timestamp request, write it to file3.tsq, send it to the server and
write the response to file3.tsr:
openssl ts -query -data file3.txt -cert | tee file3.tsq \
| tsget -h http://tsa.opentsa.org:8080/tsa \
-o file3.tsr
-Get a time stamp response for file1.tsq over HTTPS without client
+Get a timestamp response for file1.tsq over HTTPS without client
authentication:
tsget -h https://tsa.opentsa.org:8443/tsa \
-C cacerts.pem file1.tsq
-Get a time stamp response for file1.tsq over HTTPS with certificate-based
+Get a timestamp response for file1.tsq over HTTPS with certificate-based
client authentication (it will ask for the passphrase if client_key.pem is
protected):
@@ -192,7 +192,7 @@ B<RFC 3161>
=head1 COPYRIGHT
-Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man1/verify.pod b/crypto/openssl/doc/man1/verify.pod
index 63ba850b915d..71288be40d4c 100644
--- a/crypto/openssl/doc/man1/verify.pod
+++ b/crypto/openssl/doc/man1/verify.pod
@@ -98,8 +98,11 @@ current system time. B<timestamp> is the number of seconds since
=item B<-check_ss_sig>
-Verify the signature on the self-signed root CA. This is disabled by default
-because it doesn't add any security.
+Verify the signature of
+the last certificate in a chain if the certificate is supposedly self-signed.
+This is prohibited and will result in an error if it is a non-conforming CA
+certificate with key usage restrictions not including the keyCertSign bit.
+This verification is disabled by default because it doesn't add any security.
=item B<-CRLfile file>
@@ -333,7 +336,7 @@ in PEM format.
=head1 VERIFY OPERATION
The B<verify> program uses the same functions as the internal SSL and S/MIME
-verification, therefore this description applies to these verify operations
+verification, therefore, this description applies to these verify operations
too.
There is one crucial difference between the verify operations performed
@@ -769,7 +772,7 @@ is silently ignored.
=head1 COPYRIGHT
-Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man1/x509.pod b/crypto/openssl/doc/man1/x509.pod
index 65cec9dbda67..98d285e414b9 100644
--- a/crypto/openssl/doc/man1/x509.pod
+++ b/crypto/openssl/doc/man1/x509.pod
@@ -255,7 +255,7 @@ Prints out the start and expiry dates of a certificate.
=item B<-checkend arg>
Checks if the certificate expires within the next B<arg> seconds and exits
-non-zero if yes it will expire or zero if not.
+nonzero if yes it will expire or zero if not.
=item B<-fingerprint>
diff --git a/crypto/openssl/doc/man3/ASN1_INTEGER_get_int64.pod b/crypto/openssl/doc/man3/ASN1_INTEGER_get_int64.pod
index ac6a5799df9d..faf34eb18637 100644
--- a/crypto/openssl/doc/man3/ASN1_INTEGER_get_int64.pod
+++ b/crypto/openssl/doc/man3/ASN1_INTEGER_get_int64.pod
@@ -81,7 +81,7 @@ instead.
In general an B<ASN1_INTEGER> or B<ASN1_ENUMERATED> type can contain an
integer of almost arbitrary size and so cannot always be represented by a C
-B<int64_t> type. However in many cases (for example version numbers) they
+B<int64_t> type. However, in many cases (for example version numbers) they
represent small integers which can be more easily manipulated if converted to
an appropriate C integer type.
@@ -123,7 +123,7 @@ were added in OpenSSL 1.1.0.
=head1 COPYRIGHT
-Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2015-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/ASN1_STRING_length.pod b/crypto/openssl/doc/man3/ASN1_STRING_length.pod
index 85d356540bc3..ab109c2ede78 100644
--- a/crypto/openssl/doc/man3/ASN1_STRING_length.pod
+++ b/crypto/openssl/doc/man3/ASN1_STRING_length.pod
@@ -72,7 +72,7 @@ In general it cannot be assumed that the data returned by ASN1_STRING_data()
is null terminated or does not contain embedded nulls. The actual format
of the data will depend on the actual string type itself: for example
for an IA5String the data will be ASCII, for a BMPString two bytes per
-character in big endian format, and for an UTF8String it will be in UTF8 format.
+character in big endian format, and for a UTF8String it will be in UTF8 format.
Similar care should be take to ensure the data is in the correct format
when calling ASN1_STRING_set().
@@ -103,7 +103,7 @@ L<ERR_get_error(3)>
=head1 COPYRIGHT
-Copyright 2002-2018 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2002-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/ASN1_TIME_set.pod b/crypto/openssl/doc/man3/ASN1_TIME_set.pod
index 5ed817517dc6..584ae232acf6 100644
--- a/crypto/openssl/doc/man3/ASN1_TIME_set.pod
+++ b/crypto/openssl/doc/man3/ASN1_TIME_set.pod
@@ -117,7 +117,7 @@ one or both (depending on the time difference) of B<*pday> and B<*psec>
will be positive. If B<to> represents a time earlier than B<from> then
one or both of B<*pday> and B<*psec> will be negative. If B<to> and B<from>
represent the same time then B<*pday> and B<*psec> will both be zero.
-If both B<*pday> and B<*psec> are non-zero they will always have the same
+If both B<*pday> and B<*psec> are nonzero they will always have the same
sign. The value of B<*psec> will always be less than the number of seconds
in a day. If B<from> or B<to> is NULL the current time is used.
@@ -167,7 +167,7 @@ format.
=head1 BUGS
ASN1_TIME_print(), ASN1_UTCTIME_print() and ASN1_GENERALIZEDTIME_print()
-do not print out the time zone: it either prints out "GMT" or nothing. But all
+do not print out the timezone: it either prints out "GMT" or nothing. But all
certificates complying with RFC5280 et al use GMT anyway.
Use the ASN1_TIME_normalize() function to normalize the time value before
@@ -248,7 +248,7 @@ The ASN1_TIME_compare() function was added in OpenSSL 1.1.1.
=head1 COPYRIGHT
-Copyright 2015-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2015-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/ASN1_TYPE_get.pod b/crypto/openssl/doc/man3/ASN1_TYPE_get.pod
index fb797220a47f..f14850b39f59 100644
--- a/crypto/openssl/doc/man3/ASN1_TYPE_get.pod
+++ b/crypto/openssl/doc/man3/ASN1_TYPE_get.pod
@@ -33,7 +33,7 @@ up after the call.
ASN1_TYPE_set1() sets the value of B<a> to B<type> a copy of B<value>.
ASN1_TYPE_cmp() compares ASN.1 types B<a> and B<b> and returns 0 if
-they are identical and non-zero otherwise.
+they are identical and nonzero otherwise.
ASN1_TYPE_unpack_sequence() attempts to parse the SEQUENCE present in
B<t> using the ASN.1 structure B<it>. If successful it returns a pointer
@@ -62,12 +62,12 @@ length octets).
ASN1_TYPE_cmp() may not return zero if two types are equivalent but have
different encodings. For example the single content octet of the boolean TRUE
-value under BER can have any non-zero encoding but ASN1_TYPE_cmp() will
+value under BER can have any nonzero encoding but ASN1_TYPE_cmp() will
only return zero if the values are the same.
If either or both of the parameters passed to ASN1_TYPE_cmp() is NULL the
-return value is non-zero. Technically if both parameters are NULL the two
-types could be absent OPTIONAL fields and so should match, however passing
+return value is nonzero. Technically if both parameters are NULL the two
+types could be absent OPTIONAL fields and so should match, however, passing
NULL values could also indicate a programming error (for example an
unparsable type which returns NULL) for types which do B<not> match. So
applications should handle the case of two absent values separately.
@@ -80,7 +80,7 @@ ASN1_TYPE_set() does not return a value.
ASN1_TYPE_set1() returns 1 for success and 0 for failure.
-ASN1_TYPE_cmp() returns 0 if the types are identical and non-zero otherwise.
+ASN1_TYPE_cmp() returns 0 if the types are identical and nonzero otherwise.
ASN1_TYPE_unpack_sequence() returns a pointer to an ASN.1 structure or
NULL on failure.
diff --git a/crypto/openssl/doc/man3/ASYNC_WAIT_CTX_new.pod b/crypto/openssl/doc/man3/ASYNC_WAIT_CTX_new.pod
index e4d809c08fd1..0e8c1d8010a2 100644
--- a/crypto/openssl/doc/man3/ASYNC_WAIT_CTX_new.pod
+++ b/crypto/openssl/doc/man3/ASYNC_WAIT_CTX_new.pod
@@ -50,7 +50,7 @@ job in B<*fd>. The number of file descriptors returned will be stored in
B<*numfds>. It is the caller's responsibility to ensure that sufficient memory
has been allocated in B<*fd> to receive all the file descriptors. Calling
ASYNC_WAIT_CTX_get_all_fds() with a NULL B<fd> value will return no file
-descriptors but will still populate B<*numfds>. Therefore application code is
+descriptors but will still populate B<*numfds>. Therefore, application code is
typically expected to call this function twice: once to get the number of fds,
and then again when sufficient memory has been allocated. If only one
asynchronous engine is being used then normally this call will only ever return
@@ -117,7 +117,7 @@ success or 0 on error.
On Windows platforms the openssl/async.h header is dependent on some
of the types customarily made available by including windows.h. The
application developer is likely to require control over when the latter
-is included, commonly as one of the first included headers. Therefore
+is included, commonly as one of the first included headers. Therefore,
it is defined as an application developer's responsibility to include
windows.h prior to async.h.
@@ -134,7 +134,7 @@ were added in OpenSSL 1.1.0.
=head1 COPYRIGHT
-Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/ASYNC_start_job.pod b/crypto/openssl/doc/man3/ASYNC_start_job.pod
index b06db76708a2..810b9678731f 100644
--- a/crypto/openssl/doc/man3/ASYNC_start_job.pod
+++ b/crypto/openssl/doc/man3/ASYNC_start_job.pod
@@ -166,7 +166,7 @@ otherwise.
On Windows platforms the openssl/async.h header is dependent on some
of the types customarily made available by including windows.h. The
application developer is likely to require control over when the latter
-is included, commonly as one of the first included headers. Therefore
+is included, commonly as one of the first included headers. Therefore,
it is defined as an application developer's responsibility to include
windows.h prior to async.h.
@@ -321,7 +321,7 @@ added in OpenSSL 1.1.0.
=head1 COPYRIGHT
-Copyright 2015-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2015-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/BF_encrypt.pod b/crypto/openssl/doc/man3/BF_encrypt.pod
index b20f634da6f5..02e04b7f34cb 100644
--- a/crypto/openssl/doc/man3/BF_encrypt.pod
+++ b/crypto/openssl/doc/man3/BF_encrypt.pod
@@ -60,7 +60,7 @@ recipient needs to know what it was initialized with, or it won't be able
to decrypt. Some programs and protocols simplify this, like SSH, where
B<ivec> is simply initialized to zero.
BF_cbc_encrypt() operates on data that is a multiple of 8 bytes long, while
-BF_cfb64_encrypt() and BF_ofb64_encrypt() are used to encrypt an variable
+BF_cfb64_encrypt() and BF_ofb64_encrypt() are used to encrypt a variable
number of bytes (the amount does not have to be an exact multiple of 8). The
purpose of the latter two is to simulate stream ciphers, and therefore, they
need the parameter B<num>, which is a pointer to an integer where the current
@@ -109,7 +109,7 @@ L<des_modes(7)>
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/BIO_ADDR.pod b/crypto/openssl/doc/man3/BIO_ADDR.pod
index 4b169e8a89c4..e9652ed550e2 100644
--- a/crypto/openssl/doc/man3/BIO_ADDR.pod
+++ b/crypto/openssl/doc/man3/BIO_ADDR.pod
@@ -42,7 +42,7 @@ BIO_ADDR_free() frees a B<BIO_ADDR> created with BIO_ADDR_new().
BIO_ADDR_clear() clears any data held within the provided B<BIO_ADDR> and sets
it back to an uninitialised state.
-BIO_ADDR_rawmake() takes a protocol B<family>, an byte array of
+BIO_ADDR_rawmake() takes a protocol B<family>, a byte array of
size B<wherelen> with an address in network byte order pointed at
by B<where> and a port number in network byte order in B<port> (except
for the B<AF_UNIX> protocol family, where B<port> is meaningless and
@@ -115,7 +115,7 @@ L<BIO_connect(3)>, L<BIO_s_connect(3)>
=head1 COPYRIGHT
-Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/BIO_ADDRINFO.pod b/crypto/openssl/doc/man3/BIO_ADDRINFO.pod
index 8ca6454abbcb..37609666fdbf 100644
--- a/crypto/openssl/doc/man3/BIO_ADDRINFO.pod
+++ b/crypto/openssl/doc/man3/BIO_ADDRINFO.pod
@@ -94,7 +94,7 @@ information they should return isn't available.
The BIO_lookup_ex() implementation uses the platform provided getaddrinfo()
function. On Linux it is known that specifying 0 for the protocol will not
-return any SCTP based addresses when calling getaddrinfo(). Therefore if an SCTP
+return any SCTP based addresses when calling getaddrinfo(). Therefore, if an SCTP
address is required then the B<protocol> parameter to BIO_lookup_ex() should be
explicitly set to IPPROTO_SCTP. The same may be true on other platforms.
@@ -104,7 +104,7 @@ The BIO_lookup_ex() function was added in OpenSSL 1.1.1.
=head1 COPYRIGHT
-Copyright 2016-2017 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/BIO_connect.pod b/crypto/openssl/doc/man3/BIO_connect.pod
index 853315aa46a4..0ebf17cacf47 100644
--- a/crypto/openssl/doc/man3/BIO_connect.pod
+++ b/crypto/openssl/doc/man3/BIO_connect.pod
@@ -55,7 +55,7 @@ Enables regular sending of keep-alive messages.
=item BIO_SOCK_NONBLOCK
-Sets the socket to non-blocking mode.
+Sets the socket to nonblocking mode.
=item BIO_SOCK_NODELAY
@@ -107,7 +107,7 @@ Use the functions described above instead.
=head1 COPYRIGHT
-Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/BIO_ctrl.pod b/crypto/openssl/doc/man3/BIO_ctrl.pod
index 60cd10883b54..2e438c3ce952 100644
--- a/crypto/openssl/doc/man3/BIO_ctrl.pod
+++ b/crypto/openssl/doc/man3/BIO_ctrl.pod
@@ -109,7 +109,7 @@ Filter BIOs if they do not internally handle a particular BIO_ctrl()
operation usually pass the operation to the next BIO in the chain.
This often means there is no need to locate the required BIO for
a particular operation, it can be called on a chain and it will
-be automatically passed to the relevant BIO. However this can cause
+be automatically passed to the relevant BIO. However, this can cause
unexpected results: for example no current filter BIOs implement
BIO_seek(), but this may still succeed if the chain ends in a FILE
or file descriptor BIO.
@@ -126,7 +126,7 @@ the case of BIO_seek() on a file BIO for a successful operation.
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/BIO_get_data.pod b/crypto/openssl/doc/man3/BIO_get_data.pod
index c3137c4c5588..da1651c7576f 100644
--- a/crypto/openssl/doc/man3/BIO_get_data.pod
+++ b/crypto/openssl/doc/man3/BIO_get_data.pod
@@ -25,7 +25,7 @@ the BIO. This data can subsequently be retrieved via a call to BIO_get_data().
This can be used by custom BIOs for storing implementation specific information.
The BIO_set_init() function sets the value of the BIO's "init" flag to indicate
-whether initialisation has been completed for this BIO or not. A non-zero value
+whether initialisation has been completed for this BIO or not. A nonzero value
indicates that initialisation is complete, whilst zero indicates that it is not.
Often initialisation will complete during initial construction of the BIO. For
some BIOs however, initialisation may not complete until after additional steps
@@ -55,7 +55,7 @@ The functions described here were added in OpenSSL 1.1.0.
=head1 COPYRIGHT
-Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/BIO_parse_hostserv.pod b/crypto/openssl/doc/man3/BIO_parse_hostserv.pod
index 73cb6100d74e..35c14d1bc1c9 100644
--- a/crypto/openssl/doc/man3/BIO_parse_hostserv.pod
+++ b/crypto/openssl/doc/man3/BIO_parse_hostserv.pod
@@ -19,10 +19,10 @@ BIO_parse_hostserv
=head1 DESCRIPTION
BIO_parse_hostserv() will parse the information given in B<hostserv>,
-create strings with the host name and service name and give those
+create strings with the hostname and service name and give those
back via B<host> and B<service>. Those will need to be freed after
they are used. B<hostserv_prio> helps determine if B<hostserv> shall
-be interpreted primarily as a host name or a service name in ambiguous
+be interpreted primarily as a hostname or a service name in ambiguous
cases.
The syntax the BIO_parse_hostserv() recognises is:
@@ -68,7 +68,7 @@ L<BIO_ADDRINFO(3)>
=head1 COPYRIGHT
-Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/BIO_read.pod b/crypto/openssl/doc/man3/BIO_read.pod
index 270ab533e543..d0ebf32caace 100644
--- a/crypto/openssl/doc/man3/BIO_read.pod
+++ b/crypto/openssl/doc/man3/BIO_read.pod
@@ -55,7 +55,7 @@ NUL is not included in the length returned by BIO_gets().
=head1 NOTES
A 0 or -1 return is not necessarily an indication of an error. In
-particular when the source/sink is non-blocking or of a certain type
+particular when the source/sink is nonblocking or of a certain type
it may merely be an indication that no data is currently available and that
the application should retry the operation later.
@@ -87,7 +87,7 @@ keep the '\n' at the end of the line in the buffer.
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/BIO_s_accept.pod b/crypto/openssl/doc/man3/BIO_s_accept.pod
index 37b6f4d83912..312c881bbc49 100644
--- a/crypto/openssl/doc/man3/BIO_s_accept.pod
+++ b/crypto/openssl/doc/man3/BIO_s_accept.pod
@@ -143,7 +143,7 @@ however because the accept BIO will still accept additional incoming
connections. This can be resolved by using BIO_pop() (see above)
and freeing up the accept BIO after the initial connection.
-If the underlying accept socket is non-blocking and BIO_do_accept() is
+If the underlying accept socket is nonblocking and BIO_do_accept() is
called to await an incoming connection it is possible for
BIO_should_io_special() with the reason BIO_RR_ACCEPT. If this happens
then it is an indication that an accept attempt would block: the application
@@ -224,7 +224,7 @@ down each and finally closes both down.
=head1 COPYRIGHT
-Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/BIO_s_bio.pod b/crypto/openssl/doc/man3/BIO_s_bio.pod
index f78fe13489c6..4837d19440bb 100644
--- a/crypto/openssl/doc/man3/BIO_s_bio.pod
+++ b/crypto/openssl/doc/man3/BIO_s_bio.pod
@@ -144,7 +144,7 @@ without having to go through the SSL-interface.
...
BIO_new_bio_pair(&internal_bio, 0, &network_bio, 0);
SSL_set_bio(ssl, internal_bio, internal_bio);
- SSL_operations(); /* e.g SSL_read and SSL_write */
+ SSL_operations(); /* e.g. SSL_read and SSL_write */
...
application | TLS-engine
@@ -167,7 +167,7 @@ without having to go through the SSL-interface.
...
As the BIO pair will only buffer the data and never directly access the
-connection, it behaves non-blocking and will return as soon as the write
+connection, it behaves nonblocking and will return as soon as the write
buffer is full or the read buffer is drained. Then the application has to
flush the write buffer and/or fill the read buffer.
@@ -191,7 +191,7 @@ L<BIO_should_retry(3)>, L<BIO_read_ex(3)>
=head1 COPYRIGHT
-Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/BIO_s_connect.pod b/crypto/openssl/doc/man3/BIO_s_connect.pod
index 4f145297c587..1223fad831cb 100644
--- a/crypto/openssl/doc/man3/BIO_s_connect.pod
+++ b/crypto/openssl/doc/man3/BIO_s_connect.pod
@@ -106,7 +106,7 @@ If blocking I/O is set then a non positive return value from any
I/O call is caused by an error condition, although a zero return
will normally mean that the connection was closed.
-If the port name is supplied as part of the host name then this will
+If the port name is supplied as part of the hostname then this will
override any value set with BIO_set_conn_port(). This may be undesirable
if the application does not wish to allow connection to arbitrary
ports. This can be avoided by checking for the presence of the ':'
@@ -203,7 +203,7 @@ Use BIO_set_conn_address() and BIO_get_conn_address() instead.
=head1 COPYRIGHT
-Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/BIO_s_file.pod b/crypto/openssl/doc/man3/BIO_s_file.pod
index 2ed0bb3c0f35..f1a75f7c627a 100644
--- a/crypto/openssl/doc/man3/BIO_s_file.pod
+++ b/crypto/openssl/doc/man3/BIO_s_file.pod
@@ -78,7 +78,7 @@ in stdio behaviour will be mirrored by the corresponding BIO.
On Windows BIO_new_files reserves for the filename argument to be
UTF-8 encoded. In other words if you have to make it work in multi-
-lingual environment, encode file names in UTF-8.
+lingual environment, encode filenames in UTF-8.
=head1 RETURN VALUES
@@ -158,7 +158,7 @@ L<BIO_set_close(3)>, L<BIO_get_close(3)>
=head1 COPYRIGHT
-Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/BIO_set_callback.pod b/crypto/openssl/doc/man3/BIO_set_callback.pod
index 291456baa42a..f7ee104c2855 100644
--- a/crypto/openssl/doc/man3/BIO_set_callback.pod
+++ b/crypto/openssl/doc/man3/BIO_set_callback.pod
@@ -31,7 +31,7 @@ BIO_callback_fn_ex, BIO_callback_fn
=head1 DESCRIPTION
BIO_set_callback_ex() and BIO_get_callback_ex() set and retrieve the BIO
-callback. The callback is called during most high level BIO operations. It can
+callback. The callback is called during most high-level BIO operations. It can
be used for debugging purposes to trace operations on a BIO or to modify its
operation.
@@ -230,7 +230,7 @@ in crypto/bio/bio_cb.c
=head1 COPYRIGHT
-Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/BN_add.pod b/crypto/openssl/doc/man3/BN_add.pod
index 0f0e49556d72..dccd4790ede7 100644
--- a/crypto/openssl/doc/man3/BN_add.pod
+++ b/crypto/openssl/doc/man3/BN_add.pod
@@ -68,16 +68,16 @@ For division by powers of 2, use BN_rshift(3).
BN_mod() corresponds to BN_div() with I<dv> set to B<NULL>.
-BN_nnmod() reduces I<a> modulo I<m> and places the non-negative
+BN_nnmod() reduces I<a> modulo I<m> and places the nonnegative
remainder in I<r>.
-BN_mod_add() adds I<a> to I<b> modulo I<m> and places the non-negative
+BN_mod_add() adds I<a> to I<b> modulo I<m> and places the nonnegative
result in I<r>.
BN_mod_sub() subtracts I<b> from I<a> modulo I<m> and places the
-non-negative result in I<r>.
+nonnegative result in I<r>.
-BN_mod_mul() multiplies I<a> by I<b> and finds the non-negative
+BN_mod_mul() multiplies I<a> by I<b> and finds the nonnegative
remainder respective to modulus I<m> (C<r=(a*b) mod m>). I<r> may be
the same B<BIGNUM> as I<a> or I<b>. For more efficient algorithms for
repeated computations using the same modulus, see
@@ -119,7 +119,7 @@ L<BN_add_word(3)>, L<BN_set_bit(3)>
=head1 COPYRIGHT
-Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/BN_bn2bin.pod b/crypto/openssl/doc/man3/BN_bn2bin.pod
index b3cbc8cb665c..67595e05b85a 100644
--- a/crypto/openssl/doc/man3/BN_bn2bin.pod
+++ b/crypto/openssl/doc/man3/BN_bn2bin.pod
@@ -37,7 +37,7 @@ memory.
BN_bn2binpad() also converts the absolute value of B<a> into big-endian form
and stores it at B<to>. B<tolen> indicates the length of the output buffer
-B<to>. The result is padded with zeroes if necessary. If B<tolen> is less than
+B<to>. The result is padded with zeros if necessary. If B<tolen> is less than
BN_num_bytes(B<a>) an error is returned.
BN_bin2bn() converts the positive integer in big-endian form of length
@@ -106,7 +106,7 @@ L<BN_num_bytes(3)>
=head1 COPYRIGHT
-Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/BN_generate_prime.pod b/crypto/openssl/doc/man3/BN_generate_prime.pod
index f1e63f3b3c4a..25674d0348f7 100644
--- a/crypto/openssl/doc/man3/BN_generate_prime.pod
+++ b/crypto/openssl/doc/man3/BN_generate_prime.pod
@@ -127,7 +127,7 @@ For instance, to reach the 128 bit security level, B<nchecks> should be set to
If B<cb> is not B<NULL>, B<BN_GENCB_call(cb, 1, j)> is called
after the j-th iteration (j = 0, 1, ...). B<ctx> is a
-pre-allocated B<BN_CTX> (to save the overhead of allocating and
+preallocated B<BN_CTX> (to save the overhead of allocating and
freeing the structure in a loop), or B<NULL>.
BN_GENCB_call() calls the callback function held in the B<BN_GENCB> structure
diff --git a/crypto/openssl/doc/man3/BN_mod_mul_montgomery.pod b/crypto/openssl/doc/man3/BN_mod_mul_montgomery.pod
index 7f47e94c2b72..911945fd9dba 100644
--- a/crypto/openssl/doc/man3/BN_mod_mul_montgomery.pod
+++ b/crypto/openssl/doc/man3/BN_mod_mul_montgomery.pod
@@ -49,7 +49,7 @@ the result in I<r>.
BN_from_montgomery() performs the Montgomery reduction I<r> = I<a>*R^-1.
BN_to_montgomery() computes Mont(I<a>,R^2), i.e. I<a>*R.
-Note that I<a> must be non-negative and smaller than the modulus.
+Note that I<a> must be nonnegative and smaller than the modulus.
For all functions, I<ctx> is a previously allocated B<BN_CTX> used for
temporary variables.
@@ -80,7 +80,7 @@ BN_MONT_CTX_init() was removed in OpenSSL 1.1.0
=head1 COPYRIGHT
-Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/BN_set_bit.pod b/crypto/openssl/doc/man3/BN_set_bit.pod
index af02983c8fb1..67c2bac24102 100644
--- a/crypto/openssl/doc/man3/BN_set_bit.pod
+++ b/crypto/openssl/doc/man3/BN_set_bit.pod
@@ -37,11 +37,11 @@ BN_mask_bits() truncates B<a> to an B<n> bit number
shorter than B<n> bits.
BN_lshift() shifts B<a> left by B<n> bits and places the result in
-B<r> (C<r=a*2^n>). Note that B<n> must be non-negative. BN_lshift1() shifts
+B<r> (C<r=a*2^n>). Note that B<n> must be nonnegative. BN_lshift1() shifts
B<a> left by one and places the result in B<r> (C<r=2*a>).
BN_rshift() shifts B<a> right by B<n> bits and places the result in
-B<r> (C<r=a/2^n>). Note that B<n> must be non-negative. BN_rshift1() shifts
+B<r> (C<r=a/2^n>). Note that B<n> must be nonnegative. BN_rshift1() shifts
B<a> right by one and places the result in B<r> (C<r=a/2>).
For the shift functions, B<r> and B<a> may be the same variable.
@@ -59,7 +59,7 @@ L<BN_num_bytes(3)>, L<BN_add(3)>
=head1 COPYRIGHT
-Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/CMS_verify.pod b/crypto/openssl/doc/man3/CMS_verify.pod
index be688681cbc6..c7dbb6b6c275 100644
--- a/crypto/openssl/doc/man3/CMS_verify.pod
+++ b/crypto/openssl/doc/man3/CMS_verify.pod
@@ -24,7 +24,7 @@ present in B<cms>. The content is written to B<out> if it is not NULL.
B<flags> is an optional set of flags, which can be used to modify the verify
operation.
-CMS_get0_signers() retrieves the signing certificate(s) from B<cms>, it must
+CMS_get0_signers() retrieves the signing certificate(s) from B<cms>, it may only
be called after a successful CMS_verify() operation.
=head1 VERIFY PROCESS
@@ -94,7 +94,7 @@ useful if one merely wishes to write the content to B<out> and its validity
is not considered important.
Chain verification should arguably be performed using the signing time rather
-than the current time. However since the signing time is supplied by the
+than the current time. However, since the signing time is supplied by the
signer it cannot be trusted without additional evidence (such as a trusted
timestamp).
@@ -122,7 +122,7 @@ L<ERR_get_error(3)>, L<CMS_sign(3)>
=head1 COPYRIGHT
-Copyright 2008-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2008-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/CRYPTO_THREAD_run_once.pod b/crypto/openssl/doc/man3/CRYPTO_THREAD_run_once.pod
index b919e2e47816..946147e5d24e 100644
--- a/crypto/openssl/doc/man3/CRYPTO_THREAD_run_once.pod
+++ b/crypto/openssl/doc/man3/CRYPTO_THREAD_run_once.pod
@@ -93,7 +93,7 @@ On Windows platforms the CRYPTO_THREAD_* types and functions in the
openssl/crypto.h header are dependent on some of the types customarily
made available by including windows.h. The application developer is
likely to require control over when the latter is included, commonly as
-one of the first included headers. Therefore it is defined as an
+one of the first included headers. Therefore, it is defined as an
application developer's responsibility to include windows.h prior to
crypto.h where use of CRYPTO_THREAD_* types and functions is required.
@@ -161,7 +161,7 @@ L<crypto(7)>
=head1 COPYRIGHT
-Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/CRYPTO_memcmp.pod b/crypto/openssl/doc/man3/CRYPTO_memcmp.pod
index 9182d00796c9..20578c557b9e 100644
--- a/crypto/openssl/doc/man3/CRYPTO_memcmp.pod
+++ b/crypto/openssl/doc/man3/CRYPTO_memcmp.pod
@@ -19,17 +19,17 @@ contents of the memory regions pointed to by B<a> and B<b>.
=head1 RETURN VALUES
-CRYPTO_memcmp() returns 0 if the memory regions are equal and non-zero
+CRYPTO_memcmp() returns 0 if the memory regions are equal and nonzero
otherwise.
=head1 NOTES
Unlike memcmp(2), this function cannot be used to order the two memory regions
-as the return value when they differ is undefined, other than being non-zero.
+as the return value when they differ is undefined, other than being nonzero.
=head1 COPYRIGHT
-Copyright 2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2019-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the Apache License 2.0 (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/DES_random_key.pod b/crypto/openssl/doc/man3/DES_random_key.pod
index 04df6ec0dfde..a52099053ec8 100644
--- a/crypto/openssl/doc/man3/DES_random_key.pod
+++ b/crypto/openssl/doc/man3/DES_random_key.pod
@@ -120,7 +120,7 @@ is returned. If the key is a weak key, then -2 is returned. If an
error is returned, the key schedule is not generated.
DES_set_key() works like
-DES_set_key_checked() if the I<DES_check_key> flag is non-zero,
+DES_set_key_checked() if the I<DES_check_key> flag is nonzero,
otherwise like DES_set_key_unchecked(). These functions are available
for compatibility; it is recommended to use a function that does not
depend on a global variable.
@@ -137,7 +137,7 @@ DES_ecb_encrypt() is the basic DES encryption routine that encrypts or
decrypts a single 8-byte I<DES_cblock> in I<electronic code book>
(ECB) mode. It always transforms the input data, pointed to by
I<input>, into the output data, pointed to by the I<output> argument.
-If the I<encrypt> argument is non-zero (DES_ENCRYPT), the I<input>
+If the I<encrypt> argument is nonzero (DES_ENCRYPT), the I<input>
(cleartext) is encrypted in to the I<output> (ciphertext) using the
key_schedule specified by the I<schedule> argument, previously set via
I<DES_set_key>. If I<encrypt> is zero (DES_DECRYPT), the I<input> (now
@@ -156,7 +156,7 @@ The macro DES_ecb2_encrypt() is provided to perform two-key Triple-DES
encryption by using I<ks1> for the final encryption.
DES_ncbc_encrypt() encrypts/decrypts using the I<cipher-block-chaining>
-(CBC) mode of DES. If the I<encrypt> argument is non-zero, the
+(CBC) mode of DES. If the I<encrypt> argument is nonzero, the
routine cipher-block-chain encrypts the cleartext data pointed to by
the I<input> argument into the ciphertext pointed to by the I<output>
argument, using the key schedule provided by the I<schedule> argument,
@@ -313,7 +313,7 @@ on some platforms.
=head1 COPYRIGHT
-Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/DH_get0_pqg.pod b/crypto/openssl/doc/man3/DH_get0_pqg.pod
index e878fa005149..6b5e843e4832 100644
--- a/crypto/openssl/doc/man3/DH_get0_pqg.pod
+++ b/crypto/openssl/doc/man3/DH_get0_pqg.pod
@@ -81,7 +81,7 @@ DH_get0_engine() returns a handle to the ENGINE that has been set for this DH
object, or NULL if no such ENGINE has been set.
The DH_get_length() and DH_set_length() functions get and set the optional
-length parameter associated with this DH object. If the length is non-zero then
+length parameter associated with this DH object. If the length is nonzero then
it is used, otherwise it is ignored. The B<length> parameter indicates the
length of the secret exponent (private key) in bits.
@@ -118,7 +118,7 @@ The functions described here were added in OpenSSL 1.1.0.
=head1 COPYRIGHT
-Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/DH_set_method.pod b/crypto/openssl/doc/man3/DH_set_method.pod
index ea45961f1500..b36011d627f3 100644
--- a/crypto/openssl/doc/man3/DH_set_method.pod
+++ b/crypto/openssl/doc/man3/DH_set_method.pod
@@ -45,7 +45,7 @@ DH_set_method() selects B<meth> to perform all operations using the key B<dh>.
This will replace the DH_METHOD used by the DH key and if the previous method
was supplied by an ENGINE, the handle to that ENGINE will be released during the
change. It is possible to have DH keys that only work with certain DH_METHOD
-implementations (eg. from an ENGINE module that supports embedded
+implementations (e.g. from an ENGINE module that supports embedded
hardware-protected keys), and in such cases attempting to change the DH_METHOD
for the key can have unexpected results.
@@ -64,7 +64,7 @@ B<DH_METHOD>s.
DH_set_default_method() returns no value.
-DH_set_method() returns non-zero if the provided B<meth> was successfully set as
+DH_set_method() returns nonzero if the provided B<meth> was successfully set as
the method for B<dh> (including unloading the ENGINE handle if the previous
method was supplied by an ENGINE).
@@ -78,7 +78,7 @@ L<DH_new(3)>, L<DH_new(3)>, L<DH_meth_new(3)>
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/DSA_set_method.pod b/crypto/openssl/doc/man3/DSA_set_method.pod
index f10307e66d66..f6eb260c316c 100644
--- a/crypto/openssl/doc/man3/DSA_set_method.pod
+++ b/crypto/openssl/doc/man3/DSA_set_method.pod
@@ -46,7 +46,7 @@ DSA_set_method() selects B<meth> to perform all operations using the key
B<rsa>. This will replace the DSA_METHOD used by the DSA key and if the
previous method was supplied by an ENGINE, the handle to that ENGINE will
be released during the change. It is possible to have DSA keys that only
-work with certain DSA_METHOD implementations (eg. from an ENGINE module
+work with certain DSA_METHOD implementations (e.g. from an ENGINE module
that supports embedded hardware-protected keys), and in such cases
attempting to change the DSA_METHOD for the key can have unexpected
results. See L<DSA_meth_new> for information on constructing custom DSA_METHOD
@@ -64,7 +64,7 @@ B<DSA_METHOD>s.
DSA_set_default_method() returns no value.
-DSA_set_method() returns non-zero if the provided B<meth> was successfully set as
+DSA_set_method() returns nonzero if the provided B<meth> was successfully set as
the method for B<dsa> (including unloading the ENGINE handle if the previous
method was supplied by an ENGINE).
@@ -78,7 +78,7 @@ L<DSA_new(3)>, L<DSA_new(3)>, L<DSA_meth_new(3)>
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/DTLSv1_listen.pod b/crypto/openssl/doc/man3/DTLSv1_listen.pod
index 98511a475f9f..272a8c2ee099 100644
--- a/crypto/openssl/doc/man3/DTLSv1_listen.pod
+++ b/crypto/openssl/doc/man3/DTLSv1_listen.pod
@@ -35,7 +35,7 @@ message then the amplification attack has succeeded.
If DTLS is used over UDP (or any datagram based protocol that does not validate
the source IP) then it is susceptible to this type of attack. TLSv1.3 is
designed to operate over a stream-based transport protocol (such as TCP).
-If TCP is being used then there is no need to use SSL_stateless(). However some
+If TCP is being used then there is no need to use SSL_stateless(). However, some
stream-based transport protocols (e.g. QUIC) may not validate the source
address. In this case a TLSv1.3 application would be susceptible to this attack.
@@ -98,7 +98,7 @@ will be set up ready to continue the handshake. the B<peer> value will also be
filled in.
A return value of 0 indicates a non-fatal error. This could (for
-example) be because of non-blocking IO, or some invalid message having been
+example) be because of nonblocking IO, or some invalid message having been
received from a peer. Errors may be placed on the OpenSSL error queue with
further information if appropriate. Typically user code is expected to retry the
call to DTLSv1_listen() in the event of a non-fatal error.
@@ -126,7 +126,7 @@ The type of "peer" also changed in OpenSSL 1.1.0.
=head1 COPYRIGHT
-Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2015-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/ECDSA_SIG_new.pod b/crypto/openssl/doc/man3/ECDSA_SIG_new.pod
index 6a7d107079d5..010c163c414a 100644
--- a/crypto/openssl/doc/man3/ECDSA_SIG_new.pod
+++ b/crypto/openssl/doc/man3/ECDSA_SIG_new.pod
@@ -5,7 +5,7 @@
ECDSA_SIG_get0, ECDSA_SIG_get0_r, ECDSA_SIG_get0_s, ECDSA_SIG_set0,
ECDSA_SIG_new, ECDSA_SIG_free, ECDSA_size, ECDSA_sign, ECDSA_do_sign,
ECDSA_verify, ECDSA_do_verify, ECDSA_sign_setup, ECDSA_sign_ex,
-ECDSA_do_sign_ex - low level elliptic curve digital signature algorithm (ECDSA)
+ECDSA_do_sign_ex - low-level elliptic curve digital signature algorithm (ECDSA)
functions
=head1 SYNOPSIS
@@ -40,7 +40,7 @@ functions
=head1 DESCRIPTION
-Note: these functions provide a low level interface to ECDSA. Most
+Note: these functions provide a low-level interface to ECDSA. Most
applications should use the higher level B<EVP> interface such as
L<EVP_DigestSignInit(3)> or L<EVP_DigestVerifyInit(3)> instead.
@@ -199,7 +199,7 @@ L<d2i_ECDSA_SIG(3)>
=head1 COPYRIGHT
-Copyright 2004-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2004-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/EC_GROUP_new.pod b/crypto/openssl/doc/man3/EC_GROUP_new.pod
index c80b191785c4..b1141a077739 100644
--- a/crypto/openssl/doc/man3/EC_GROUP_new.pod
+++ b/crypto/openssl/doc/man3/EC_GROUP_new.pod
@@ -84,7 +84,7 @@ specific PK B<params>.
EC_GROUP_set_curve() sets the curve parameters B<p>, B<a> and B<b>. For a curve
over Fp B<p> is the prime for the field. For a curve over F2^m B<p> represents
the irreducible polynomial - each bit represents a term in the polynomial.
-Therefore there will either be three or five bits set dependent on whether the
+Therefore, there will either be three or five bits set dependent on whether the
polynomial is a trinomial or a pentanomial.
In either case, B<a> and B<b> represents the coefficients a and b from the
relevant equation introduced above.
@@ -152,7 +152,7 @@ L<EC_GFp_simple_method(3)>, L<d2i_ECPKParameters(3)>
=head1 COPYRIGHT
-Copyright 2013-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2013-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/EC_KEY_new.pod b/crypto/openssl/doc/man3/EC_KEY_new.pod
index 9d32d78a399e..6507dc95cdff 100644
--- a/crypto/openssl/doc/man3/EC_KEY_new.pod
+++ b/crypto/openssl/doc/man3/EC_KEY_new.pod
@@ -9,7 +9,8 @@ EC_KEY_get0_engine,
EC_KEY_get0_group, EC_KEY_set_group, EC_KEY_get0_private_key,
EC_KEY_set_private_key, EC_KEY_get0_public_key, EC_KEY_set_public_key,
EC_KEY_get_conv_form,
-EC_KEY_set_conv_form, EC_KEY_set_asn1_flag, EC_KEY_precompute_mult,
+EC_KEY_set_conv_form, EC_KEY_set_asn1_flag,
+EC_KEY_decoded_from_explicit_params, EC_KEY_precompute_mult,
EC_KEY_generate_key, EC_KEY_check_key, EC_KEY_set_public_key_affine_coordinates,
EC_KEY_oct2key, EC_KEY_key2buf, EC_KEY_oct2priv, EC_KEY_priv2oct,
EC_KEY_priv2buf - Functions for creating, destroying and manipulating
@@ -38,6 +39,7 @@ EC_KEY objects
point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key);
void EC_KEY_set_conv_form(EC_KEY *eckey, point_conversion_form_t cform);
void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag);
+ int EC_KEY_decoded_from_explicit_params(const EC_KEY *key);
int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx);
int EC_KEY_generate_key(EC_KEY *key);
int EC_KEY_check_key(const EC_KEY *key);
@@ -118,11 +120,15 @@ EC_KEY_set_asn1_flag() sets the asn1_flag on the underlying EC_GROUP object
(if set). Refer to L<EC_GROUP_copy(3)> for further information on the
asn1_flag.
+EC_KEY_decoded_from_explicit_params() returns 1 if the group of the I<key> was
+decoded from data with explicitly encoded group parameters, -1 if the I<key>
+is NULL or the group parameters are missing, and 0 otherwise.
+
EC_KEY_precompute_mult() stores multiples of the underlying EC_GROUP generator
for faster point multiplication. See also L<EC_POINT_add(3)>.
EC_KEY_oct2key() and EC_KEY_key2buf() are identical to the functions
-EC_POINT_oct2point() and EC_KEY_point2buf() except they use the public key
+EC_POINT_oct2point() and EC_POINT_point2buf() except they use the public key
EC_POINT in B<eckey>.
EC_KEY_oct2priv() and EC_KEY_priv2oct() convert between the private key
@@ -178,7 +184,7 @@ L<d2i_ECPKParameters(3)>
=head1 COPYRIGHT
-Copyright 2013-2017 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2013-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/EC_POINT_new.pod b/crypto/openssl/doc/man3/EC_POINT_new.pod
index 8cadaa75f145..5d2c3f2e9b22 100644
--- a/crypto/openssl/doc/man3/EC_POINT_new.pod
+++ b/crypto/openssl/doc/man3/EC_POINT_new.pod
@@ -148,7 +148,7 @@ EC_POINT_get_Jprojective_coordinates_GFp() respectively.
Points can also be described in terms of their compressed co-ordinates. For a
point (x, y), for any given value for x such that the point is on the curve
-there will only ever be two possible values for y. Therefore a point can be set
+there will only ever be two possible values for y. Therefore, a point can be set
using the EC_POINT_set_compressed_coordinates() function where B<x> is the x
co-ordinate and B<y_bit> is a value 0 or 1 to identify which of the two
possible values for y should be used.
@@ -243,7 +243,7 @@ L<EC_GFp_simple_method(3)>, L<d2i_ECPKParameters(3)>
=head1 COPYRIGHT
-Copyright 2013-2018 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2013-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/ENGINE_add.pod b/crypto/openssl/doc/man3/ENGINE_add.pod
index a2fc299482fc..369900c248c5 100644
--- a/crypto/openssl/doc/man3/ENGINE_add.pod
+++ b/crypto/openssl/doc/man3/ENGINE_add.pod
@@ -181,7 +181,7 @@ implementation includes the following abstractions;
=head2 Reference counting and handles
Due to the modular nature of the ENGINE API, pointers to ENGINEs need to be
-treated as handles - ie. not only as pointers, but also as references to
+treated as handles - i.e. not only as pointers, but also as references to
the underlying ENGINE object. Ie. one should obtain a new reference when
making copies of an ENGINE pointer if the copies will be used (and
released) independently.
@@ -252,15 +252,15 @@ operational ENGINE for a given cryptographic purpose.
To obtain a functional reference from an existing structural reference,
call the ENGINE_init() function. This returns zero if the ENGINE was not
-already operational and couldn't be successfully initialised (eg. lack of
+already operational and couldn't be successfully initialised (e.g. lack of
system drivers, no special hardware attached, etc), otherwise it will
-return non-zero to indicate that the ENGINE is now operational and will
+return nonzero to indicate that the ENGINE is now operational and will
have allocated a new B<functional> reference to the ENGINE. All functional
references are released by calling ENGINE_finish() (which removes the
implicit structural reference as well).
The second way to get a functional reference is by asking OpenSSL for a
-default implementation for a given task, eg. by ENGINE_get_default_RSA(),
+default implementation for a given task, e.g. by ENGINE_get_default_RSA(),
ENGINE_get_default_cipher_engine(), etc. These are discussed in the next
section, though they are not usually required by application programmers as
they are used automatically when creating and using the relevant
@@ -278,7 +278,7 @@ In the case of other abstractions like RSA, DSA, etc, there is only one
"algorithm" so all implementations implicitly register using the same 'nid'
index.
-When a default ENGINE is requested for a given abstraction/algorithm/mode, (eg.
+When a default ENGINE is requested for a given abstraction/algorithm/mode, (e.g.
when calling RSA_new_method(NULL)), a "get_default" call will be made to the
ENGINE subsystem to process the corresponding state table and return a
functional reference to an initialised ENGINE whose implementation should be
@@ -328,7 +328,7 @@ is something for the application to control. Some applications
will want to allow the user to specify exactly which ENGINE they want used
if any is to be used at all. Others may prefer to load all support and have
OpenSSL automatically use at run-time any ENGINE that is able to
-successfully initialise - ie. to assume that this corresponds to
+successfully initialise - i.e. to assume that this corresponds to
acceleration hardware attached to the machine or some such thing. There are
probably numerous other ways in which applications may prefer to handle
things, so we will simply illustrate the consequences as they apply to a
@@ -417,7 +417,7 @@ so that it can be initialised for use. This could include the path to any
driver or config files it needs to load, required network addresses,
smart-card identifiers, passwords to initialise protected devices,
logging information, etc etc. This class of commands typically needs to be
-passed to an ENGINE B<before> attempting to initialise it, ie. before
+passed to an ENGINE B<before> attempting to initialise it, i.e. before
calling ENGINE_init(). The other class of commands consist of settings or
operations that tweak certain behaviour or cause certain operations to take
place, and these commands may work either before or after ENGINE_init(), or
@@ -477,7 +477,7 @@ boolean success or failure.
}
Note that ENGINE_ctrl_cmd_string() accepts a boolean argument that can
-relax the semantics of the function - if set non-zero it will only return
+relax the semantics of the function - if set nonzero it will only return
failure if the ENGINE supported the given command name but failed while
executing it, if the ENGINE doesn't support the command name it will simply
return success without doing anything. In this case we assume the user is
@@ -490,7 +490,7 @@ It is possible to discover at run-time the names, numerical-ids, descriptions
and input parameters of the control commands supported by an ENGINE using a
structural reference. Note that some control commands are defined by OpenSSL
itself and it will intercept and handle these control commands on behalf of the
-ENGINE, ie. the ENGINE's ctrl() handler is not used for the control command.
+ENGINE, i.e. the ENGINE's ctrl() handler is not used for the control command.
openssl/engine.h defines an index, ENGINE_CMD_BASE, that all control commands
implemented by ENGINEs should be numbered from. Any command value lower than
this symbol is considered a "generic" command is handled directly by the
@@ -556,7 +556,7 @@ by applications, administrations, users, etc. These can support arbitrary
operations via ENGINE_ctrl(), including passing to and/or from the control
commands data of any arbitrary type. These commands are supported in the
discovery mechanisms simply to allow applications to determine if an ENGINE
-supports certain specific commands it might want to use (eg. application "foo"
+supports certain specific commands it might want to use (e.g. application "foo"
might query various ENGINEs to see if they implement "FOO_GET_VENDOR_LOGO_GIF" -
and ENGINE could therefore decide whether or not to support this "foo"-specific
extension).
@@ -657,7 +657,7 @@ and should not be used.
=head1 COPYRIGHT
-Copyright 2002-2018 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2002-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/ERR_get_error.pod b/crypto/openssl/doc/man3/ERR_get_error.pod
index a76df03882d8..fc155ad08199 100644
--- a/crypto/openssl/doc/man3/ERR_get_error.pod
+++ b/crypto/openssl/doc/man3/ERR_get_error.pod
@@ -45,7 +45,7 @@ messages.
ERR_get_error_line(), ERR_peek_error_line() and
ERR_peek_last_error_line() are the same as the above, but they
-additionally store the file name and line number where
+additionally store the filename and line number where
the error occurred in *B<file> and *B<line>, unless these are B<NULL>.
ERR_get_error_line_data(), ERR_peek_error_line_data() and
@@ -69,7 +69,7 @@ L<ERR_GET_LIB(3)>
=head1 COPYRIGHT
-Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/ERR_print_errors.pod b/crypto/openssl/doc/man3/ERR_print_errors.pod
index f7e612f61886..78a4b6a8d910 100644
--- a/crypto/openssl/doc/man3/ERR_print_errors.pod
+++ b/crypto/openssl/doc/man3/ERR_print_errors.pod
@@ -29,7 +29,7 @@ B<u> as the callback parameters.
The error strings will have the following format:
- [pid]:error:[error code]:[library name]:[function name]:[reason string]:[file name]:[line]:[optional text message]
+ [pid]:error:[error code]:[library name]:[function name]:[reason string]:[filename]:[line]:[optional text message]
I<error code> is an 8 digit hexadecimal number. I<library name>,
I<function name> and I<reason string> are ASCII text, as is I<optional
@@ -49,7 +49,7 @@ L<ERR_get_error(3)>
=head1 COPYRIGHT
-Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/ERR_put_error.pod b/crypto/openssl/doc/man3/ERR_put_error.pod
index 4fba618db4f2..ee6a61ffe2c2 100644
--- a/crypto/openssl/doc/man3/ERR_put_error.pod
+++ b/crypto/openssl/doc/man3/ERR_put_error.pod
@@ -39,14 +39,14 @@ descriptions. For example, the function ssl3_read_bytes() reports a
SSLerr(SSL_F_SSL3_READ_BYTES, SSL_R_SSL_HANDSHAKE_FAILURE);
-Function and reason codes should consist of upper case characters,
+Function and reason codes should consist of uppercase characters,
numbers and underscores only. The error file generation script translates
function codes into function names by looking in the header files
for an appropriate function name, if none is found it just uses
the capitalized form such as "SSL3_READ_BYTES" in the above example.
The trailing section of a reason code (after the "_R_") is translated
-into lower case and underscores changed to spaces.
+into lowercase and underscores changed to spaces.
Although a library will normally report errors using its own specific
XXXerr macro, another library's macro can be used. This is normally
@@ -65,7 +65,7 @@ L<ERR_load_strings(3)>
=head1 COPYRIGHT
-Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/EVP_DigestInit.pod b/crypto/openssl/doc/man3/EVP_DigestInit.pod
index 434e22030fdd..a0ed943a3f60 100644
--- a/crypto/openssl/doc/man3/EVP_DigestInit.pod
+++ b/crypto/openssl/doc/man3/EVP_DigestInit.pod
@@ -68,7 +68,7 @@ EVP_MD_CTX_pkey_ctx, EVP_MD_CTX_set_pkey_ctx - EVP digest routines
=head1 DESCRIPTION
-The EVP digest routines are a high level interface to message digests,
+The EVP digest routines are a high-level interface to message digests,
and should be used instead of the cipher-specific functions.
=over 4
@@ -338,7 +338,7 @@ This function has no return value.
=head1 NOTES
The B<EVP> interface to message digests should almost always be used in
-preference to the low level interfaces. This is because the code then becomes
+preference to the low-level interfaces. This is because the code then becomes
transparent to the digest used and much more flexible.
New applications should use the SHA-2 (such as L<EVP_sha256(3)>) or the SHA-3
@@ -443,7 +443,7 @@ The EVP_MD_CTX_set_pkey_ctx() function was added in 1.1.1.
=head1 COPYRIGHT
-Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/EVP_DigestSignInit.pod b/crypto/openssl/doc/man3/EVP_DigestSignInit.pod
index 912880a5e1c5..4efc8a497491 100644
--- a/crypto/openssl/doc/man3/EVP_DigestSignInit.pod
+++ b/crypto/openssl/doc/man3/EVP_DigestSignInit.pod
@@ -20,7 +20,7 @@ EVP_DigestSign - EVP signing functions
=head1 DESCRIPTION
-The EVP signature routines are a high level interface to digital signatures.
+The EVP signature routines are a high-level interface to digital signatures.
EVP_DigestSignInit() sets up signing context B<ctx> to use digest B<type> from
ENGINE B<e> and private key B<pkey>. B<ctx> must be created with
@@ -110,7 +110,7 @@ The error codes can be obtained from L<ERR_get_error(3)>.
=head1 NOTES
The B<EVP> interface to digital signatures should almost always be used in
-preference to the low level interfaces. This is because the code then becomes
+preference to the low-level interfaces. This is because the code then becomes
transparent to the algorithm used and much more flexible.
EVP_DigestSign() is a one shot operation which signs a single block of data
diff --git a/crypto/openssl/doc/man3/EVP_DigestVerifyInit.pod b/crypto/openssl/doc/man3/EVP_DigestVerifyInit.pod
index 0806cd5d58c4..e7d8c8318445 100644
--- a/crypto/openssl/doc/man3/EVP_DigestVerifyInit.pod
+++ b/crypto/openssl/doc/man3/EVP_DigestVerifyInit.pod
@@ -19,7 +19,7 @@ EVP_DigestVerify - EVP signature verification functions
=head1 DESCRIPTION
-The EVP signature routines are a high level interface to digital signatures.
+The EVP signature routines are a high-level interface to digital signatures.
EVP_DigestVerifyInit() sets up verification context B<ctx> to use digest
B<type> from ENGINE B<e> and public key B<pkey>. B<ctx> must be created
@@ -62,7 +62,7 @@ The error codes can be obtained from L<ERR_get_error(3)>.
=head1 NOTES
The B<EVP> interface to digital signatures should almost always be used in
-preference to the low level interfaces. This is because the code then becomes
+preference to the low-level interfaces. This is because the code then becomes
transparent to the algorithm used and much more flexible.
EVP_DigestVerify() is a one shot operation which verifies a single block of
@@ -104,7 +104,7 @@ were added in OpenSSL 1.0.0.
=head1 COPYRIGHT
-Copyright 2006-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/EVP_EncodeInit.pod b/crypto/openssl/doc/man3/EVP_EncodeInit.pod
index 8055b100b252..e8b65d381890 100644
--- a/crypto/openssl/doc/man3/EVP_EncodeInit.pod
+++ b/crypto/openssl/doc/man3/EVP_EncodeInit.pod
@@ -29,7 +29,7 @@ EVP_DecodeBlock - EVP base 64 encode/decode routines
=head1 DESCRIPTION
-The EVP encode routines provide a high level interface to base 64 encoding and
+The EVP encode routines provide a high-level interface to base 64 encoding and
decoding. Base 64 encoding converts binary data into a printable form that uses
the characters A-Z, a-z, 0-9, "+" and "/" to represent the data. For every 3
bytes of binary data provided 4 bytes of base 64 encoded data will be produced
@@ -83,8 +83,8 @@ EVP_ENCODE_CTX_num() will return the number of as yet unprocessed bytes still to
be encoded or decoded that are pending in the B<ctx> object.
EVP_EncodeBlock() encodes a full block of input data in B<f> and of length
-B<dlen> and stores it in B<t>. For every 3 bytes of input provided 4 bytes of
-output data will be produced. If B<dlen> is not divisible by 3 then the block is
+B<n> and stores it in B<t>. For every 3 bytes of input provided 4 bytes of
+output data will be produced. If B<n> is not divisible by 3 then the block is
encoded as a final block of data and the output is padded such that it is always
divisible by 4. Additionally a NUL terminator character will be added. For
example if 16 bytes of input data is provided then 24 bytes of encoded data is
@@ -151,7 +151,7 @@ L<evp(7)>
=head1 COPYRIGHT
-Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/EVP_EncryptInit.pod b/crypto/openssl/doc/man3/EVP_EncryptInit.pod
index aaf9975c4c26..0d8a780bb794 100644
--- a/crypto/openssl/doc/man3/EVP_EncryptInit.pod
+++ b/crypto/openssl/doc/man3/EVP_EncryptInit.pod
@@ -120,7 +120,7 @@ EVP_enc_null
=head1 DESCRIPTION
-The EVP cipher routines are a high level interface to certain
+The EVP cipher routines are a high-level interface to certain
symmetric ciphers.
EVP_CIPHER_CTX_new() creates a cipher context.
@@ -146,10 +146,15 @@ appropriate.
EVP_EncryptUpdate() encrypts B<inl> bytes from the buffer B<in> and
writes the encrypted version to B<out>. This function can be called
multiple times to encrypt successive blocks of data. The amount
-of data written depends on the block alignment of the encrypted data:
-as a result the amount of data written may be anything from zero bytes
-to (inl + cipher_block_size - 1) so B<out> should contain sufficient
-room. The actual number of bytes written is placed in B<outl>. It also
+of data written depends on the block alignment of the encrypted data.
+For most ciphers and modes, the amount of data written can be anything
+from zero bytes to (inl + cipher_block_size - 1) bytes.
+For wrap cipher modes, the amount of data written can be anything
+from zero bytes to (inl + cipher_block_size) bytes.
+For stream ciphers, the amount of data written can be anything from zero
+bytes to inl bytes.
+Thus, B<out> should contain sufficient room for the operation being performed.
+The actual number of bytes written is placed in B<outl>. It also
checks if B<in> and B<out> are partially overlapping, and if they are
0 is returned to indicate failure.
@@ -422,8 +427,8 @@ Sets the CCM B<L> value. If not set a default is used (8 for AES).
=item EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, ivlen, NULL)
-Sets the CCM nonce (IV) length. This call can only be made before specifying an
-nonce value. The nonce length is given by B<15 - L> so it is 7 by default for
+Sets the CCM nonce (IV) length. This call can only be made before specifying
+a nonce value. The nonce length is given by B<15 - L> so it is 7 by default for
AES.
=back
@@ -463,10 +468,10 @@ This call is only valid when decrypting data.
=head1 NOTES
Where possible the B<EVP> interface to symmetric ciphers should be used in
-preference to the low level interfaces. This is because the code then becomes
+preference to the low-level interfaces. This is because the code then becomes
transparent to the cipher used and much more flexible. Additionally, the
B<EVP> interface will ensure the use of platform specific cryptographic
-acceleration such as AES-NI (the low level interfaces do not provide the
+acceleration such as AES-NI (the low-level interfaces do not provide the
guarantee).
PKCS padding works by adding B<n> padding bytes of value B<n> to make the total
@@ -591,7 +596,7 @@ with a 128-bit key:
/* Don't set key or IV right away; we want to check lengths */
ctx = EVP_CIPHER_CTX_new();
- EVP_CipherInit_ex(&ctx, EVP_aes_128_cbc(), NULL, NULL, NULL,
+ EVP_CipherInit_ex(ctx, EVP_aes_128_cbc(), NULL, NULL, NULL,
do_encrypt);
OPENSSL_assert(EVP_CIPHER_CTX_key_length(ctx) == 16);
OPENSSL_assert(EVP_CIPHER_CTX_iv_length(ctx) == 16);
@@ -654,7 +659,7 @@ EVP_CIPHER_CTX_reset().
=head1 COPYRIGHT
-Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/EVP_OpenInit.pod b/crypto/openssl/doc/man3/EVP_OpenInit.pod
index 61b4307bca31..37223c8abf4c 100644
--- a/crypto/openssl/doc/man3/EVP_OpenInit.pod
+++ b/crypto/openssl/doc/man3/EVP_OpenInit.pod
@@ -16,7 +16,7 @@ EVP_OpenInit, EVP_OpenUpdate, EVP_OpenFinal - EVP envelope decryption
=head1 DESCRIPTION
-The EVP envelope routines are a high level interface to envelope
+The EVP envelope routines are a high-level interface to envelope
decryption. They decrypt a public key encrypted symmetric key and
then decrypt data using it.
@@ -59,7 +59,7 @@ L<EVP_SealInit(3)>
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/EVP_PKEY_CTX_ctrl.pod b/crypto/openssl/doc/man3/EVP_PKEY_CTX_ctrl.pod
index 16d8462a4263..e4753168abf7 100644
--- a/crypto/openssl/doc/man3/EVP_PKEY_CTX_ctrl.pod
+++ b/crypto/openssl/doc/man3/EVP_PKEY_CTX_ctrl.pod
@@ -290,7 +290,7 @@ parameter generation. Use 0 for PKCS#3 DH and 1 for X9.42 DH.
The default is 0.
The EVP_PKEY_CTX_set_dh_pad() macro sets the DH padding mode. If B<pad> is
-1 the shared secret is padded with zeroes up to the size of the DH prime B<p>.
+1 the shared secret is padded with zeros up to the size of the DH prime B<p>.
If B<pad> is zero (the default) then no padding is performed.
EVP_PKEY_CTX_set_dh_nid() sets the DH parameters to values corresponding to
@@ -459,7 +459,7 @@ macros were added in 1.1.1, other functions were added in OpenSSL 1.0.0.
=head1 COPYRIGHT
-Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/EVP_PKEY_CTX_new.pod b/crypto/openssl/doc/man3/EVP_PKEY_CTX_new.pod
index f01fc9752297..8c3c796f6fdd 100644
--- a/crypto/openssl/doc/man3/EVP_PKEY_CTX_new.pod
+++ b/crypto/openssl/doc/man3/EVP_PKEY_CTX_new.pod
@@ -31,7 +31,7 @@ If B<ctx> is NULL, nothing is done.
=head1 NOTES
The B<EVP_PKEY_CTX> structure is an opaque public key algorithm context used
-by the OpenSSL high level public key API. Contexts B<MUST NOT> be shared between
+by the OpenSSL high-level public key API. Contexts B<MUST NOT> be shared between
threads: that is it is not permissible to use the same context simultaneously
in two threads.
@@ -52,7 +52,7 @@ These functions were added in OpenSSL 1.0.0.
=head1 COPYRIGHT
-Copyright 2006-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/EVP_PKEY_keygen.pod b/crypto/openssl/doc/man3/EVP_PKEY_keygen.pod
index 83cebe7ce2f4..82df15363035 100644
--- a/crypto/openssl/doc/man3/EVP_PKEY_keygen.pod
+++ b/crypto/openssl/doc/man3/EVP_PKEY_keygen.pod
@@ -51,7 +51,7 @@ generation callback.
The function EVP_PKEY_CTX_get_keygen_info() returns parameters associated
with the generation operation. If B<idx> is -1 the total number of
parameters available is returned. Any non negative value returns the value of
-that parameter. EVP_PKEY_CTX_gen_keygen_info() with a non-negative value for
+that parameter. EVP_PKEY_CTX_gen_keygen_info() with a nonnegative value for
B<idx> should only be called within the generation callback.
If the callback returns 0 then the key generation operation is aborted and an
@@ -196,7 +196,7 @@ in OpenSSL 1.1.1.
=head1 COPYRIGHT
-Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/EVP_PKEY_new.pod b/crypto/openssl/doc/man3/EVP_PKEY_new.pod
index 667269cc624e..faf5a117e5ae 100644
--- a/crypto/openssl/doc/man3/EVP_PKEY_new.pod
+++ b/crypto/openssl/doc/man3/EVP_PKEY_new.pod
@@ -66,7 +66,8 @@ B<EVP_PKEY_X25519>, B<EVP_PKEY_ED25519>, B<EVP_PKEY_X448> or B<EVP_PKEY_ED448>.
EVP_PKEY_new_CMAC_key() works in the same way as EVP_PKEY_new_raw_private_key()
except it is only for the B<EVP_PKEY_CMAC> algorithm type. In addition to the
raw private key data, it also takes a cipher algorithm to be used during
-creation of a CMAC in the B<cipher> argument.
+creation of a CMAC in the B<cipher> argument. The cipher should be a standard
+encryption only cipher. For example AEAD and XTS ciphers should not be used.
EVP_PKEY_new_mac_key() works in the same way as EVP_PKEY_new_raw_private_key().
New applications should use EVP_PKEY_new_raw_private_key() instead.
diff --git a/crypto/openssl/doc/man3/EVP_SealInit.pod b/crypto/openssl/doc/man3/EVP_SealInit.pod
index 2c2c89a71b51..4bee44922d53 100644
--- a/crypto/openssl/doc/man3/EVP_SealInit.pod
+++ b/crypto/openssl/doc/man3/EVP_SealInit.pod
@@ -17,7 +17,7 @@ EVP_SealInit, EVP_SealUpdate, EVP_SealFinal - EVP envelope encryption
=head1 DESCRIPTION
-The EVP envelope routines are a high level interface to envelope
+The EVP envelope routines are a high-level interface to envelope
encryption. They generate a random key and IV (if required) then
"envelope" it by using public key encryption. Data can then be
encrypted using this key.
@@ -82,7 +82,7 @@ L<RAND(7)>
=head1 COPYRIGHT
-Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/EVP_SignInit.pod b/crypto/openssl/doc/man3/EVP_SignInit.pod
index 22ce747d333f..299c5cf312ee 100644
--- a/crypto/openssl/doc/man3/EVP_SignInit.pod
+++ b/crypto/openssl/doc/man3/EVP_SignInit.pod
@@ -17,7 +17,7 @@ EVP_SignInit, EVP_SignInit_ex, EVP_SignUpdate, EVP_SignFinal
=head1 DESCRIPTION
-The EVP signature routines are a high level interface to digital
+The EVP signature routines are a high-level interface to digital
signatures.
EVP_SignInit_ex() sets up signing context I<ctx> to use digest
@@ -48,7 +48,7 @@ The error codes can be obtained by L<ERR_get_error(3)>.
=head1 NOTES
The B<EVP> interface to digital signatures should almost always be used in
-preference to the low level interfaces. This is because the code then becomes
+preference to the low-level interfaces. This is because the code then becomes
transparent to the algorithm used and much more flexible.
When signing with DSA private keys the random number generator must be seeded.
diff --git a/crypto/openssl/doc/man3/EVP_VerifyInit.pod b/crypto/openssl/doc/man3/EVP_VerifyInit.pod
index 647c99bceb5a..3c6b2daeca78 100644
--- a/crypto/openssl/doc/man3/EVP_VerifyInit.pod
+++ b/crypto/openssl/doc/man3/EVP_VerifyInit.pod
@@ -19,7 +19,7 @@ EVP_VerifyInit, EVP_VerifyUpdate, EVP_VerifyFinal
=head1 DESCRIPTION
-The EVP signature verification routines are a high level interface to digital
+The EVP signature verification routines are a high-level interface to digital
signatures.
EVP_VerifyInit_ex() sets up verification context B<ctx> to use digest
@@ -49,7 +49,7 @@ The error codes can be obtained by L<ERR_get_error(3)>.
=head1 NOTES
The B<EVP> interface to digital signatures should almost always be used in
-preference to the low level interfaces. This is because the code then becomes
+preference to the low-level interfaces. This is because the code then becomes
transparent to the algorithm used and much more flexible.
The call to EVP_VerifyFinal() internally finalizes a copy of the digest context.
@@ -85,7 +85,7 @@ L<SHA1(3)>, L<dgst(1)>
=head1 COPYRIGHT
-Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/HMAC.pod b/crypto/openssl/doc/man3/HMAC.pod
index 30c0e6bac392..27022686f7aa 100644
--- a/crypto/openssl/doc/man3/HMAC.pod
+++ b/crypto/openssl/doc/man3/HMAC.pod
@@ -21,7 +21,7 @@ HMAC_size
#include <openssl/hmac.h>
unsigned char *HMAC(const EVP_MD *evp_md, const void *key,
- int key_len, const unsigned char *d, int n,
+ int key_len, const unsigned char *d, size_t n,
unsigned char *md, unsigned int *md_len);
HMAC_CTX *HMAC_CTX_new(void);
@@ -29,7 +29,7 @@ HMAC_size
int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int key_len,
const EVP_MD *md, ENGINE *impl);
- int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, int len);
+ int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, size_t len);
int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len);
void HMAC_CTX_free(HMAC_CTX *ctx);
@@ -69,7 +69,7 @@ EVP_shake256().
HMAC_CTX_new() creates a new HMAC_CTX in heap memory.
-HMAC_CTX_reset() zeroes an existing B<HMAC_CTX> and associated
+HMAC_CTX_reset() zeros an existing B<HMAC_CTX> and associated
resources, making it suitable for new computations as if it was newly
created with HMAC_CTX_new().
@@ -149,7 +149,7 @@ OpenSSL before version 1.0.0.
=head1 COPYRIGHT
-Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/OCSP_cert_to_id.pod b/crypto/openssl/doc/man3/OCSP_cert_to_id.pod
index c8d39c191358..49393f7329a0 100644
--- a/crypto/openssl/doc/man3/OCSP_cert_to_id.pod
+++ b/crypto/openssl/doc/man3/OCSP_cert_to_id.pod
@@ -52,7 +52,7 @@ corresponding parameter can be set to B<NULL>.
OCSP_cert_to_id() and OCSP_cert_id_new() return either a pointer to a valid
B<OCSP_CERTID> structure or B<NULL> if an error occurred.
-OCSP_id_cmp() and OCSP_id_issuer_cmp() returns zero for a match and non-zero
+OCSP_id_cmp() and OCSP_id_issuer_cmp() returns zero for a match and nonzero
otherwise.
OCSP_CERTID_free() does not return a value.
@@ -79,7 +79,7 @@ L<OCSP_sendreq_new(3)>
=head1 COPYRIGHT
-Copyright 2015-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2015-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/OCSP_request_add1_nonce.pod b/crypto/openssl/doc/man3/OCSP_request_add1_nonce.pod
index 81bf645108f3..777d876d04af 100644
--- a/crypto/openssl/doc/man3/OCSP_request_add1_nonce.pod
+++ b/crypto/openssl/doc/man3/OCSP_request_add1_nonce.pod
@@ -57,7 +57,7 @@ performance reasons. As a result they do not support nonces.
The return values of OCSP_check_nonce() can be checked to cover each case. A
positive return value effectively indicates success: nonces are both present
-and match, both absent or present in the response only. A non-zero return
+and match, both absent or present in the response only. A nonzero return
additionally covers the case where the nonce is present in the request only:
this will happen if the responder doesn't support nonces. A zero return value
indicates present and mismatched nonces: this should be treated as an error
diff --git a/crypto/openssl/doc/man3/OCSP_resp_find_status.pod b/crypto/openssl/doc/man3/OCSP_resp_find_status.pod
index 35f7d35e9976..72dcc426c649 100644
--- a/crypto/openssl/doc/man3/OCSP_resp_find_status.pod
+++ b/crypto/openssl/doc/man3/OCSP_resp_find_status.pod
@@ -112,7 +112,7 @@ no freeing of the results is necessary.
OCSP_check_validity() checks the validity of B<thisupd> and B<nextupd> values
which will be typically obtained from OCSP_resp_find_status() or
-OCSP_single_get0_status(). If B<sec> is non-zero it indicates how many seconds
+OCSP_single_get0_status(). If B<sec> is nonzero it indicates how many seconds
leeway should be allowed in the check. If B<maxsec> is positive it indicates
the maximum age of B<thisupd> in seconds.
@@ -167,7 +167,7 @@ can then take appropriate action based on the status of the certificate.
An OCSP response for a certificate contains B<thisUpdate> and B<nextUpdate>
fields. Normally the current time should be between these two values. To
-account for clock skew the B<maxsec> field can be set to non-zero in
+account for clock skew the B<maxsec> field can be set to nonzero in
OCSP_check_validity(). Some responders do not set the B<nextUpdate> field, this
would otherwise mean an ancient response would be considered valid: the
B<maxsec> parameter to OCSP_check_validity() can be used to limit the permitted
@@ -189,7 +189,7 @@ L<OCSP_sendreq_new(3)>
=head1 COPYRIGHT
-Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2015-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/OCSP_sendreq_new.pod b/crypto/openssl/doc/man3/OCSP_sendreq_new.pod
index a129a16bf23c..16d5a21dfcae 100644
--- a/crypto/openssl/doc/man3/OCSP_sendreq_new.pod
+++ b/crypto/openssl/doc/man3/OCSP_sendreq_new.pod
@@ -34,7 +34,7 @@ response header maximum line length of B<maxline>. If B<maxline> is zero a
default value of 4k is used. The OCSP request B<req> may be set to B<NULL>
and provided later if required.
-OCSP_sendreq_nbio() performs non-blocking I/O on the OCSP request context
+OCSP_sendreq_nbio() performs nonblocking I/O on the OCSP request context
B<rctx>. When the operation is complete it returns the response in B<*presp>.
OCSP_REQ_CTX_free() frees up the OCSP context B<rctx>.
@@ -96,7 +96,7 @@ corresponding BIO can be examined to determine which operation (read or
write) should be retried and appropriate action taken (for example a select()
call on the underlying socket).
-OCSP_sendreq_bio() does not support retries and so cannot handle non-blocking
+OCSP_sendreq_bio() does not support retries and so cannot handle nonblocking
I/O efficiently. It is retained for compatibility and its use in new
applications is not recommended.
diff --git a/crypto/openssl/doc/man3/OPENSSL_LH_COMPFUNC.pod b/crypto/openssl/doc/man3/OPENSSL_LH_COMPFUNC.pod
index a312ef7342f4..ae0a4bbf978b 100644
--- a/crypto/openssl/doc/man3/OPENSSL_LH_COMPFUNC.pod
+++ b/crypto/openssl/doc/man3/OPENSSL_LH_COMPFUNC.pod
@@ -51,7 +51,7 @@ an unsigned long hash value for its key field. The hash value is
normally truncated to a power of 2, so make sure that your hash
function returns well mixed low order bits. The B<compare> callback
takes two arguments (pointers to two hash table entries), and returns
-0 if their keys are equal, non-zero otherwise.
+0 if their keys are equal, nonzero otherwise.
If your hash table
will contain items of some particular type and the B<hash> and
@@ -196,7 +196,7 @@ all such parameters as constant.
As an example, a hash table may be maintained by code that, for
reasons of encapsulation, has only "const" access to the data being
-indexed in the hash table (ie. it is returned as "const" from
+indexed in the hash table (i.e. it is returned as "const" from
elsewhere in their code) - in this case the LHASH prototypes are
appropriate as-is. Conversely, if the caller is responsible for the
life-time of the data in question, then they may well wish to make
@@ -229,7 +229,7 @@ type checking.
=head1 COPYRIGHT
-Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/OPENSSL_config.pod b/crypto/openssl/doc/man3/OPENSSL_config.pod
index 6294ee1d1be1..528eef0cf927 100644
--- a/crypto/openssl/doc/man3/OPENSSL_config.pod
+++ b/crypto/openssl/doc/man3/OPENSSL_config.pod
@@ -41,7 +41,7 @@ initialization (that is before starting any threads).
There are several reasons why calling the OpenSSL configuration routines is
advisable. For example, to load dynamic ENGINEs from shared libraries (DSOs).
-However very few applications currently support the control interface and so
+However, very few applications currently support the control interface and so
very few can load and use dynamic ENGINEs. Equally in future more sophisticated
ENGINEs will require certain control operations to customize them. If an
application calls OPENSSL_config() it doesn't need to know or care about
@@ -75,7 +75,7 @@ deprecated in OpenSSL 1.1.0 by OPENSSL_init_crypto().
=head1 COPYRIGHT
-Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2004-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/OPENSSL_ia32cap.pod b/crypto/openssl/doc/man3/OPENSSL_ia32cap.pod
index 08a181168f79..73c96d70e698 100644
--- a/crypto/openssl/doc/man3/OPENSSL_ia32cap.pod
+++ b/crypto/openssl/doc/man3/OPENSSL_ia32cap.pod
@@ -102,7 +102,7 @@ and RORX;
=item bit #64+19 denoting availability of ADCX and ADOX instructions;
=item bit #64+21 denoting availability of VPMADD52[LH]UQ instructions,
-a.k.a. AVX512IFMA extension;
+aka AVX512IFMA extension;
=item bit #64+29 denoting availability of SHA extension;
@@ -157,7 +157,7 @@ Not available.
=head1 COPYRIGHT
-Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2004-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/OPENSSL_init_crypto.pod b/crypto/openssl/doc/man3/OPENSSL_init_crypto.pod
index c7823e32d6df..3447f5f1138f 100644
--- a/crypto/openssl/doc/man3/OPENSSL_init_crypto.pod
+++ b/crypto/openssl/doc/man3/OPENSSL_init_crypto.pod
@@ -39,13 +39,13 @@ needs so no explicit initialisation is required. Similarly it will also
automatically deinitialise as required.
However, there may be situations when explicit initialisation is desirable or
-needed, for example when some non-default initialisation is required. The
+needed, for example when some nondefault initialisation is required. The
function OPENSSL_init_crypto() can be used for this purpose for
libcrypto (see also L<OPENSSL_init_ssl(3)> for the libssl
equivalent).
Numerous internal OpenSSL functions call OPENSSL_init_crypto().
-Therefore, in order to perform non-default initialisation,
+Therefore, in order to perform nondefault initialisation,
OPENSSL_init_crypto() MUST be called by application code prior to
any other OpenSSL function calls.
@@ -216,10 +216,10 @@ The filename, application name, and flags can be customized by providing a
non-null B<OPENSSL_INIT_SETTINGS> object.
The object can be allocated via B<OPENSSL_init_new()>.
The B<OPENSSL_INIT_set_config_filename()> function can be used to specify a
-non-default filename, which is copied and need not refer to persistent storage.
+nondefault filename, which is copied and need not refer to persistent storage.
Similarly, OPENSSL_INIT_set_config_appname() can be used to specify a
-non-default application name.
-Finally, OPENSSL_INIT_set_file_flags can be used to specify non-default flags.
+nondefault application name.
+Finally, OPENSSL_INIT_set_file_flags can be used to specify nondefault flags.
If the B<CONF_MFLAGS_IGNORE_RETURN_CODES> flag is not included, any errors in
the configuration file will cause an error return from B<OPENSSL_init_crypto>
or indirectly L<OPENSSL_init_ssl(3)>.
@@ -264,7 +264,7 @@ and OPENSSL_INIT_free() functions were added in OpenSSL 1.1.0.
=head1 COPYRIGHT
-Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/OPENSSL_init_ssl.pod b/crypto/openssl/doc/man3/OPENSSL_init_ssl.pod
index b963e5e7a926..cf4f08911409 100644
--- a/crypto/openssl/doc/man3/OPENSSL_init_ssl.pod
+++ b/crypto/openssl/doc/man3/OPENSSL_init_ssl.pod
@@ -23,14 +23,14 @@ needs so no explicit initialisation is required. Similarly it will also
automatically deinitialise as required.
However, there may be situations when explicit initialisation is desirable or
-needed, for example when some non-default initialisation is required. The
+needed, for example when some nondefault initialisation is required. The
function OPENSSL_init_ssl() can be used for this purpose. Calling
this function will explicitly initialise BOTH libcrypto and libssl. To
explicitly initialise ONLY libcrypto see the
L<OPENSSL_init_crypto(3)> function.
Numerous internal OpenSSL functions call OPENSSL_init_ssl().
-Therefore, in order to perform non-default initialisation,
+Therefore, in order to perform nondefault initialisation,
OPENSSL_init_ssl() MUST be called by application code prior to
any other OpenSSL function calls.
@@ -74,7 +74,7 @@ The OPENSSL_init_ssl() function was added in OpenSSL 1.1.0.
=head1 COPYRIGHT
-Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/OSSL_STORE_open.pod b/crypto/openssl/doc/man3/OSSL_STORE_open.pod
index 1e8ebf7ce1ce..71fdd6932f82 100644
--- a/crypto/openssl/doc/man3/OSSL_STORE_open.pod
+++ b/crypto/openssl/doc/man3/OSSL_STORE_open.pod
@@ -46,21 +46,22 @@ OSSL_STORE_close() to work together.
=head2 Functions
-OSSL_STORE_open() takes a uri or path B<uri>, password UI method
-B<ui_method> with associated data B<ui_data>, and post processing
-callback B<post_process> with associated data B<post_process_data>,
+OSSL_STORE_open() takes a uri or path I<uri>, password UI method
+I<ui_method> with associated data I<ui_data>, and post processing
+callback I<post_process> with associated data I<post_process_data>,
opens a channel to the data located at that URI and returns a
B<OSSL_STORE_CTX> with all necessary internal information.
-The given B<ui_method> and B<ui_data_data> will be reused by all
-functions that use B<OSSL_STORE_CTX> when interaction is needed.
-The given B<post_process> and B<post_process_data> will be reused by
+The given I<ui_method> and I<ui_data> will be reused by all
+functions that use B<OSSL_STORE_CTX> when interaction is needed,
+for instance to provide a password.
+The given I<post_process> and I<post_process_data> will be reused by
OSSL_STORE_load() to manipulate or drop the value to be returned.
-The B<post_process> function drops values by returning B<NULL>, which
+The I<post_process> function drops values by returning NULL, which
will cause OSSL_STORE_load() to start its process over with loading
-the next object, until B<post_process> returns something other than
-B<NULL>, or the end of data is reached as indicated by OSSL_STORE_eof().
+the next object, until I<post_process> returns something other than
+NULL, or the end of data is reached as indicated by OSSL_STORE_eof().
-OSSL_STORE_ctrl() takes a B<OSSL_STORE_CTX>, and command number B<cmd> and
+OSSL_STORE_ctrl() takes a B<OSSL_STORE_CTX>, and command number I<cmd> and
more arguments not specified here.
The available loader specific command numbers and arguments they each
take depends on the loader that's used and is documented together with
@@ -94,6 +95,7 @@ OSSL_STORE_eof() shows that the end of data has been reached.
OSSL_STORE_close() takes a B<OSSL_STORE_CTX>, closes the channel that was opened
by OSSL_STORE_open() and frees all other information that was stored in the
B<OSSL_STORE_CTX>, as well as the B<OSSL_STORE_CTX> itself.
+If I<ctx> is NULL it does nothing.
=head1 SUPPORTED SCHEMES
@@ -123,12 +125,12 @@ See L<passphrase-encoding(7)> for further information.
=head1 RETURN VALUES
OSSL_STORE_open() returns a pointer to a B<OSSL_STORE_CTX> on success, or
-B<NULL> on failure.
+NULL on failure.
OSSL_STORE_load() returns a pointer to a B<OSSL_STORE_INFO> on success, or
-B<NULL> on error or when end of data is reached.
+NULL on error or when end of data is reached.
Use OSSL_STORE_error() and OSSL_STORE_eof() to determine the meaning of a
-returned B<NULL>.
+returned NULL.
OSSL_STORE_eof() returns 1 if the end of data has been reached, otherwise
0.
@@ -149,9 +151,12 @@ OSSL_STORE_CTX(), OSSL_STORE_post_process_info_fn(), OSSL_STORE_open(),
OSSL_STORE_ctrl(), OSSL_STORE_load(), OSSL_STORE_eof() and OSSL_STORE_close()
were added in OpenSSL 1.1.1.
+Handling of NULL I<ctx> argument for OSSL_STORE_close()
+was introduced in OpenSSL 1.1.1h.
+
=head1 COPYRIGHT
-Copyright 2016-2018 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/PEM_read_bio_PrivateKey.pod b/crypto/openssl/doc/man3/PEM_read_bio_PrivateKey.pod
index a8306500fb3c..233df7fca217 100644
--- a/crypto/openssl/doc/man3/PEM_read_bio_PrivateKey.pod
+++ b/crypto/openssl/doc/man3/PEM_read_bio_PrivateKey.pod
@@ -206,7 +206,7 @@ RSA structure. The public key is encoded using a PKCS#1 RSAPublicKey
structure.
The B<RSA_PUBKEY> functions also process an RSA public key using
-an RSA structure. However the public key is encoded using a
+an RSA structure. However, the public key is encoded using a
SubjectPublicKeyInfo structure and an error occurs if the public
key is not RSA.
@@ -387,7 +387,7 @@ The pseudo code to derive the key would look similar to:
=head1 BUGS
The PEM read routines in some versions of OpenSSL will not correctly reuse
-an existing structure. Therefore the following:
+an existing structure. Therefore, the following:
PEM_read_bio_X509(bp, &x, 0, NULL);
@@ -483,7 +483,7 @@ as they will be formally deprecated in a future releases.
=head1 COPYRIGHT
-Copyright 2001-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/PKCS7_verify.pod b/crypto/openssl/doc/man3/PKCS7_verify.pod
index ebcdde0795fb..9e238c565952 100644
--- a/crypto/openssl/doc/man3/PKCS7_verify.pod
+++ b/crypto/openssl/doc/man3/PKCS7_verify.pod
@@ -91,7 +91,7 @@ useful if one merely wishes to write the content to B<out> and its validity
is not considered important.
Chain verification should arguably be performed using the signing time rather
-than the current time. However since the signing time is supplied by the
+than the current time. However, since the signing time is supplied by the
signer it cannot be trusted without additional evidence (such as a trusted
timestamp).
@@ -119,7 +119,7 @@ L<ERR_get_error(3)>, L<PKCS7_sign(3)>
=head1 COPYRIGHT
-Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2002-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/RAND_DRBG_new.pod b/crypto/openssl/doc/man3/RAND_DRBG_new.pod
index 5da91be9dfab..ca52e2f3ddfc 100644
--- a/crypto/openssl/doc/man3/RAND_DRBG_new.pod
+++ b/crypto/openssl/doc/man3/RAND_DRBG_new.pod
@@ -56,7 +56,7 @@ its type and to instantiate it.
The optional B<flags> argument specifies a set of bit flags which can be
joined using the | operator. Currently, the only flag is
-RAND_DRBG_FLAG_CTR_NO_DF, which disables the use of a the derivation function
+RAND_DRBG_FLAG_CTR_NO_DF, which disables the use of the derivation function
ctr_df. For an explanation, see [NIST SP 800-90A Rev. 1].
If a B<parent> instance is specified then this will be used instead of
@@ -117,7 +117,7 @@ The RAND_DRBG functions were added in OpenSSL 1.1.1.
=head1 COPYRIGHT
-Copyright 2017-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2017-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/RAND_DRBG_set_callbacks.pod b/crypto/openssl/doc/man3/RAND_DRBG_set_callbacks.pod
index 55e9a8b7af77..4d04645694ce 100644
--- a/crypto/openssl/doc/man3/RAND_DRBG_set_callbacks.pod
+++ b/crypto/openssl/doc/man3/RAND_DRBG_set_callbacks.pod
@@ -77,7 +77,7 @@ does not satisfy the conditions requested by [NIST SP 800-90C], then
it must also indicate an error by returning a buffer length of 0.
See NOTES section for more details.
-The B<cleanup_entropy>() callback is called from the B<drbg> to to clear and
+The B<cleanup_entropy>() callback is called from the B<drbg> to clear and
free the buffer allocated previously by get_entropy().
The values B<out> and B<outlen> are the random buffer's address and length,
as returned by the get_entropy() callback.
@@ -136,7 +136,7 @@ The RAND_DRBG functions were added in OpenSSL 1.1.1.
=head1 COPYRIGHT
-Copyright 2017-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2017-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/RAND_add.pod b/crypto/openssl/doc/man3/RAND_add.pod
index 4ba6ff977dd1..e4454d44124e 100644
--- a/crypto/openssl/doc/man3/RAND_add.pod
+++ b/crypto/openssl/doc/man3/RAND_add.pod
@@ -62,7 +62,7 @@ usage by the random seed sources. Some seed sources maintain open file
descriptors by default, which allows such sources to operate in a
chroot(2) jail without the associated device nodes being available. When
the B<keep> argument is zero, this call disables the retention of file
-descriptors. Conversely, a non-zero argument enables the retention of
+descriptors. Conversely, a nonzero argument enables the retention of
file descriptors. This function is usually called during initialization
and it takes effect immediately.
@@ -94,7 +94,7 @@ not be used.
=head1 COPYRIGHT
-Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/RAND_load_file.pod b/crypto/openssl/doc/man3/RAND_load_file.pod
index 24f8fdcf4fe8..6ddd2c89b0d6 100644
--- a/crypto/openssl/doc/man3/RAND_load_file.pod
+++ b/crypto/openssl/doc/man3/RAND_load_file.pod
@@ -17,7 +17,7 @@ RAND_load_file, RAND_write_file, RAND_file_name - PRNG seed file
=head1 DESCRIPTION
RAND_load_file() reads a number of bytes from file B<filename> and
-adds them to the PRNG. If B<max_bytes> is non-negative,
+adds them to the PRNG. If B<max_bytes> is nonnegative,
up to B<max_bytes> are read;
if B<max_bytes> is -1, the complete file is read.
Do not load the same file multiple times unless its contents have
@@ -37,7 +37,7 @@ file. B<buf> points to a buffer of size B<num> in which to store the
filename.
On all systems, if the environment variable B<RANDFILE> is set, its
-value will be used as the seed file name.
+value will be used as the seed filename.
Otherwise, the file is called C<.rnd>, found in platform dependent locations:
=over 4
@@ -57,7 +57,7 @@ Otherwise, the file is called C<.rnd>, found in platform dependent locations:
=back
If C<$HOME> (on non-Windows and non-VMS system) is not set either, or
-B<num> is too small for the path name, an error occurs.
+B<num> is too small for the pathname, an error occurs.
=head1 RETURN VALUES
@@ -77,7 +77,7 @@ L<RAND(7)>
=head1 COPYRIGHT
-Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/RSA_blinding_on.pod b/crypto/openssl/doc/man3/RSA_blinding_on.pod
index 5db127f16e3c..85f4453b5cc8 100644
--- a/crypto/openssl/doc/man3/RSA_blinding_on.pod
+++ b/crypto/openssl/doc/man3/RSA_blinding_on.pod
@@ -19,7 +19,7 @@ measure the time of RSA decryption or signature operations, blinding
must be used to protect the RSA operation from that attack.
RSA_blinding_on() turns blinding on for key B<rsa> and generates a
-random blinding factor. B<ctx> is B<NULL> or a pre-allocated and
+random blinding factor. B<ctx> is B<NULL> or a preallocated and
initialized B<BN_CTX>.
RSA_blinding_off() turns blinding off and frees the memory used for
@@ -33,7 +33,7 @@ RSA_blinding_off() returns no value.
=head1 COPYRIGHT
-Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/RSA_private_encrypt.pod b/crypto/openssl/doc/man3/RSA_private_encrypt.pod
index 060a9000f8b4..6629fff3c95b 100644
--- a/crypto/openssl/doc/man3/RSA_private_encrypt.pod
+++ b/crypto/openssl/doc/man3/RSA_private_encrypt.pod
@@ -2,7 +2,7 @@
=head1 NAME
-RSA_private_encrypt, RSA_public_decrypt - low level signature operations
+RSA_private_encrypt, RSA_public_decrypt - low-level signature operations
=head1 SYNOPSIS
@@ -16,7 +16,7 @@ RSA_private_encrypt, RSA_public_decrypt - low level signature operations
=head1 DESCRIPTION
-These functions handle RSA signatures at a low level.
+These functions handle RSA signatures at a low-level.
RSA_private_encrypt() signs the B<flen> bytes at B<from> (usually a
message digest with an algorithm identifier) using the private key
@@ -64,7 +64,7 @@ L<RSA_sign(3)>, L<RSA_verify(3)>
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/RSA_set_method.pod b/crypto/openssl/doc/man3/RSA_set_method.pod
index 4bb63962cfe1..449b841ed2ad 100644
--- a/crypto/openssl/doc/man3/RSA_set_method.pod
+++ b/crypto/openssl/doc/man3/RSA_set_method.pod
@@ -51,7 +51,7 @@ RSA_set_method() selects B<meth> to perform all operations using the key
B<rsa>. This will replace the RSA_METHOD used by the RSA key and if the
previous method was supplied by an ENGINE, the handle to that ENGINE will
be released during the change. It is possible to have RSA keys that only
-work with certain RSA_METHOD implementations (eg. from an ENGINE module
+work with certain RSA_METHOD implementations (e.g. from an ENGINE module
that supports embedded hardware-protected keys), and in such cases
attempting to change the RSA_METHOD for the key can have unexpected
results.
@@ -176,7 +176,7 @@ was replaced to always return NULL in OpenSSL 1.1.1.
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/SHA256_Init.pod b/crypto/openssl/doc/man3/SHA256_Init.pod
index 6a8f2fa0db0e..f50839db6385 100644
--- a/crypto/openssl/doc/man3/SHA256_Init.pod
+++ b/crypto/openssl/doc/man3/SHA256_Init.pod
@@ -75,9 +75,6 @@ SHA512_DIGEST_LENGTH). Also note that, as for the SHA1() function above, the
SHA224(), SHA256(), SHA384() and SHA512() functions are not thread safe if
B<md> is NULL.
-The predecessor of SHA-1, SHA, is also implemented, but it should be
-used only when backward compatibility is required.
-
=head1 RETURN VALUES
SHA1(), SHA224(), SHA256(), SHA384() and SHA512() return a pointer to the hash
@@ -98,7 +95,7 @@ L<EVP_DigestInit(3)>
=head1 COPYRIGHT
-Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/SSL_CONF_cmd.pod b/crypto/openssl/doc/man3/SSL_CONF_cmd.pod
index 7f2449e379b9..900c4f3a5648 100644
--- a/crypto/openssl/doc/man3/SSL_CONF_cmd.pod
+++ b/crypto/openssl/doc/man3/SSL_CONF_cmd.pod
@@ -79,7 +79,7 @@ B<ClientHello>.
The B<value> argument is a colon separated list of groups. The group can be
either the B<NIST> name (e.g. B<P-256>), some other commonly used name where
-applicable (e.g. B<X25519>) or an OpenSSL OID name (e.g B<prime256v1>). Group
+applicable (e.g. B<X25519>) or an OpenSSL OID name (e.g. B<prime256v1>). Group
names are case sensitive. The list should be in order of preference with the
most preferred group first.
@@ -95,7 +95,7 @@ servers
The B<value> argument is a curve name or the special value B<auto> which
picks an appropriate curve based on client and server preferences. The curve
can be either the B<NIST> name (e.g. B<P-256>) or an OpenSSL OID name
-(e.g B<prime256v1>). Curve names are case sensitive.
+(e.g. B<prime256v1>). Curve names are case sensitive.
=item B<-cipher>
@@ -147,13 +147,16 @@ B<SSL_OP_NO_RENEGOTIATION>.
=item B<-min_protocol>, B<-max_protocol>
Sets the minimum and maximum supported protocol.
-Currently supported protocol values are B<SSLv3>, B<TLSv1>,
-B<TLSv1.1>, B<TLSv1.2>, B<TLSv1.3> for TLS and B<DTLSv1>, B<DTLSv1.2> for DTLS,
-and B<None> for no limit.
-If either bound is not specified then only the other bound applies,
-if specified.
-To restrict the supported protocol versions use these commands rather
-than the deprecated alternative commands below.
+Currently supported protocol values are B<SSLv3>, B<TLSv1>, B<TLSv1.1>,
+B<TLSv1.2>, B<TLSv1.3> for TLS; B<DTLSv1>, B<DTLSv1.2> for DTLS, and B<None>
+for no limit.
+If either the lower or upper bound is not specified then only the other bound
+applies, if specified.
+If your application supports both TLS and DTLS you can specify any of these
+options twice, once with a bound for TLS and again with an appropriate bound
+for DTLS.
+To restrict the supported protocol versions use these commands rather than the
+deprecated alternative commands below.
=item B<-no_ssl3>, B<-no_tls1>, B<-no_tls1_1>, B<-no_tls1_2>, B<-no_tls1_3>
@@ -356,7 +359,7 @@ B<ClientHello>.
The B<value> argument is a colon separated list of groups. The group can be
either the B<NIST> name (e.g. B<P-256>), some other commonly used name where
-applicable (e.g. B<X25519>) or an OpenSSL OID name (e.g B<prime256v1>). Group
+applicable (e.g. B<X25519>) or an OpenSSL OID name (e.g. B<prime256v1>). Group
names are case sensitive. The list should be in order of preference with the
most preferred group first.
@@ -370,7 +373,11 @@ This sets the minimum supported SSL, TLS or DTLS version.
Currently supported protocol values are B<SSLv3>, B<TLSv1>, B<TLSv1.1>,
B<TLSv1.2>, B<TLSv1.3>, B<DTLSv1> and B<DTLSv1.2>.
-The value B<None> will disable the limit.
+The SSL and TLS bounds apply only to TLS-based contexts, while the DTLS bounds
+apply only to DTLS-based contexts.
+The command can be repeated with one instance setting a TLS bound, and the
+other setting a DTLS bound.
+The value B<None> applies to both types of contexts and disables the limits.
=item B<MaxProtocol>
@@ -378,7 +385,11 @@ This sets the maximum supported SSL, TLS or DTLS version.
Currently supported protocol values are B<SSLv3>, B<TLSv1>, B<TLSv1.1>,
B<TLSv1.2>, B<TLSv1.3>, B<DTLSv1> and B<DTLSv1.2>.
-The value B<None> will disable the limit.
+The SSL and TLS bounds apply only to TLS-based contexts, while the DTLS bounds
+apply only to DTLS-based contexts.
+The command can be repeated with one instance setting a TLS bound, and the
+other setting a DTLS bound.
+The value B<None> applies to both types of contexts and disables the limits.
=item B<Protocol>
@@ -537,7 +548,7 @@ The value is a string without any specific structure.
=item B<SSL_CONF_TYPE_FILE>
-The value is a file name.
+The value is a filename.
=item B<SSL_CONF_TYPE_DIR>
@@ -683,7 +694,7 @@ B<AllowNoDHEKEX> and B<PrioritizeChaCha> were added in OpenSSL 1.1.1.
=head1 COPYRIGHT
-Copyright 2012-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2012-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/SSL_CTX_dane_enable.pod b/crypto/openssl/doc/man3/SSL_CTX_dane_enable.pod
index 7168bd64fda8..6f9514ae77da 100644
--- a/crypto/openssl/doc/man3/SSL_CTX_dane_enable.pod
+++ b/crypto/openssl/doc/man3/SSL_CTX_dane_enable.pod
@@ -122,7 +122,7 @@ SSL_get0_dane_tlsa() can be used to retrieve the fields of the TLSA record that
matched the peer certificate chain.
The return value indicates the match depth or failure to match just as with
SSL_get0_dane_authority().
-When the return value is non-negative, the storage pointed to by the B<usage>,
+When the return value is nonnegative, the storage pointed to by the B<usage>,
B<selector>, B<mtype> and B<data> parameters is updated to the corresponding
TLSA record fields.
The B<data> field is in binary wire form, and is therefore not NUL-terminated,
@@ -136,7 +136,7 @@ SSL_CTX_dane_set_flags() and SSL_dane_set_flags() can be used to enable
optional DANE verification features.
SSL_CTX_dane_clear_flags() and SSL_dane_clear_flags() can be used to disable
the same features.
-The B<flags> argument is a bitmask of the features to enable or disable.
+The B<flags> argument is a bit mask of the features to enable or disable.
The B<flags> set for an B<SSL_CTX> context are copied to each B<SSL> handle
associated with that context at the time the handle is created.
Subsequent changes in the context's B<flags> have no effect on the B<flags> set
@@ -173,7 +173,7 @@ certificate or a public key that fails to parse.
The functions SSL_get0_dane_authority() and SSL_get0_dane_tlsa() return a
negative value when DANE authentication failed or was not enabled, a
-non-negative value indicates the chain depth at which the TLSA record matched a
+nonnegative value indicates the chain depth at which the TLSA record matched a
chain certificate, or the depth of the top-most certificate, when the TLSA
record is a full public key that is its signer.
@@ -372,7 +372,7 @@ These functions were added in OpenSSL 1.1.0.
=head1 COPYRIGHT
-Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/SSL_CTX_set_alpn_select_cb.pod b/crypto/openssl/doc/man3/SSL_CTX_set_alpn_select_cb.pod
index 56c86097b602..e90caecda425 100644
--- a/crypto/openssl/doc/man3/SSL_CTX_set_alpn_select_cb.pod
+++ b/crypto/openssl/doc/man3/SSL_CTX_set_alpn_select_cb.pod
@@ -114,7 +114,7 @@ provided by the callback.
=head1 NOTES
The protocol-lists must be in wire-format, which is defined as a vector of
-non-empty, 8-bit length-prefixed, byte strings. The length-prefix byte is not
+nonempty, 8-bit length-prefixed, byte strings. The length-prefix byte is not
included in the length. Each string is limited to 255 bytes. A byte-string
length of 0 is invalid. A truncated byte-string is invalid. The length of the
vector is not in the vector itself, but in a separate variable.
@@ -187,7 +187,7 @@ L<SSL_CTX_set_tlsext_servername_arg(3)>
=head1 COPYRIGHT
-Copyright 2016-2017 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/SSL_CTX_set_generate_session_id.pod b/crypto/openssl/doc/man3/SSL_CTX_set_generate_session_id.pod
index 1735c6271b5a..2ad3bf0fbf9d 100644
--- a/crypto/openssl/doc/man3/SSL_CTX_set_generate_session_id.pod
+++ b/crypto/openssl/doc/man3/SSL_CTX_set_generate_session_id.pod
@@ -108,8 +108,8 @@ server id given, and will fill the rest with pseudo random bytes:
/*
* Prefix the session_id with the required prefix. NB: If our
* prefix is too long, clip it - but there will be worse effects
- * anyway, eg. the server could only possibly create 1 session
- * ID (ie. the prefix!) so all future session negotiations will
+ * anyway, e.g. the server could only possibly create 1 session
+ * ID (i.e. the prefix!) so all future session negotiations will
* fail due to conflicts.
*/
memcpy(id, session_id_prefix, strlen(session_id_prefix) < *id_len ?
@@ -128,7 +128,7 @@ L<ssl(7)>, L<SSL_get_version(3)>
=head1 COPYRIGHT
-Copyright 2001-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/SSL_CTX_set_info_callback.pod b/crypto/openssl/doc/man3/SSL_CTX_set_info_callback.pod
index 01b03f9a59ae..cc032f870934 100644
--- a/crypto/openssl/doc/man3/SSL_CTX_set_info_callback.pod
+++ b/crypto/openssl/doc/man3/SSL_CTX_set_info_callback.pod
@@ -50,7 +50,7 @@ the callback function was called. If B<ret> is 0, an error condition occurred.
If an alert is handled, SSL_CB_ALERT is set and B<ret> specifies the alert
information.
-B<where> is a bitmask made up of the following bits:
+B<where> is a bit mask made up of the following bits:
=over 4
@@ -64,7 +64,7 @@ per state in some situations.
Callback has been called to indicate exit of a handshake function. This will
happen after the end of a handshake, but may happen at other times too such as
-on error or when IO might otherwise block and non-blocking is being used.
+on error or when IO might otherwise block and nonblocking is being used.
=item SSL_CB_READ
@@ -156,7 +156,7 @@ L<SSL_alert_type_string(3)>
=head1 COPYRIGHT
-Copyright 2001-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/SSL_CTX_set_max_cert_list.pod b/crypto/openssl/doc/man3/SSL_CTX_set_max_cert_list.pod
index 01936c58470c..3996c97682bc 100644
--- a/crypto/openssl/doc/man3/SSL_CTX_set_max_cert_list.pod
+++ b/crypto/openssl/doc/man3/SSL_CTX_set_max_cert_list.pod
@@ -39,7 +39,7 @@ received from a faulty or malicious peer, a maximum size for the certificate
chain is set.
The default value for the maximum certificate chain size is 100kB (30kB
-on the 16bit DOS platform). This should be sufficient for usual certificate
+on the 16-bit DOS platform). This should be sufficient for usual certificate
chains (OpenSSL's default maximum chain length is 10, see
L<SSL_CTX_set_verify(3)>, and certificates
without special extensions have a typical size of 1-2kB).
@@ -72,7 +72,7 @@ L<SSL_CTX_set_verify(3)>
=head1 COPYRIGHT
-Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/SSL_CTX_set_mode.pod b/crypto/openssl/doc/man3/SSL_CTX_set_mode.pod
index 387d1ec1ef04..85e3353e0e2c 100644
--- a/crypto/openssl/doc/man3/SSL_CTX_set_mode.pod
+++ b/crypto/openssl/doc/man3/SSL_CTX_set_mode.pod
@@ -18,13 +18,13 @@ SSL_CTX_set_mode, SSL_CTX_clear_mode, SSL_set_mode, SSL_clear_mode, SSL_CTX_get_
=head1 DESCRIPTION
-SSL_CTX_set_mode() adds the mode set via bitmask in B<mode> to B<ctx>.
+SSL_CTX_set_mode() adds the mode set via bit mask in B<mode> to B<ctx>.
Options already set before are not cleared.
-SSL_CTX_clear_mode() removes the mode set via bitmask in B<mode> from B<ctx>.
+SSL_CTX_clear_mode() removes the mode set via bit mask in B<mode> from B<ctx>.
-SSL_set_mode() adds the mode set via bitmask in B<mode> to B<ssl>.
+SSL_set_mode() adds the mode set via bit mask in B<mode> to B<ssl>.
Options already set before are not cleared.
-SSL_clear_mode() removes the mode set via bitmask in B<mode> from B<ssl>.
+SSL_clear_mode() removes the mode set via bit mask in B<mode> from B<ssl>.
SSL_CTX_get_mode() returns the mode set for B<ctx>.
@@ -50,8 +50,8 @@ the behaviour of write().
Make it possible to retry SSL_write_ex() or SSL_write() with changed buffer
location (the buffer contents must stay the same). This is not the default to
-avoid the misconception that non-blocking SSL_write() behaves like
-non-blocking write().
+avoid the misconception that nonblocking SSL_write() behaves like
+nonblocking write().
=item SSL_MODE_AUTO_RETRY
@@ -64,9 +64,9 @@ If such a non-application data record was processed, the flag
B<SSL_MODE_AUTO_RETRY> causes it to try to process the next record instead of
returning.
-In a non-blocking environment applications must be prepared to handle
+In a nonblocking environment applications must be prepared to handle
incomplete read/write operations.
-Setting B<SSL_MODE_AUTO_RETRY> for a non-blocking B<BIO> will process
+Setting B<SSL_MODE_AUTO_RETRY> for a nonblocking B<BIO> will process
non-application data records until either no more data is available or
an application data record has been processed.
@@ -121,10 +121,10 @@ default since 1.1.1.
=head1 RETURN VALUES
-SSL_CTX_set_mode() and SSL_set_mode() return the new mode bitmask
+SSL_CTX_set_mode() and SSL_set_mode() return the new mode bit mask
after adding B<mode>.
-SSL_CTX_get_mode() and SSL_get_mode() return the current bitmask.
+SSL_CTX_get_mode() and SSL_get_mode() return the current bit mask.
=head1 SEE ALSO
@@ -137,7 +137,7 @@ SSL_MODE_ASYNC was added in OpenSSL 1.1.0.
=head1 COPYRIGHT
-Copyright 2001-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/SSL_CTX_set_options.pod b/crypto/openssl/doc/man3/SSL_CTX_set_options.pod
index 2d840b62cb24..969e0366c45a 100644
--- a/crypto/openssl/doc/man3/SSL_CTX_set_options.pod
+++ b/crypto/openssl/doc/man3/SSL_CTX_set_options.pod
@@ -23,16 +23,16 @@ SSL_get_secure_renegotiation_support - manipulate SSL options
=head1 DESCRIPTION
-SSL_CTX_set_options() adds the options set via bitmask in B<options> to B<ctx>.
+SSL_CTX_set_options() adds the options set via bit mask in B<options> to B<ctx>.
Options already set before are not cleared!
-SSL_set_options() adds the options set via bitmask in B<options> to B<ssl>.
+SSL_set_options() adds the options set via bit mask in B<options> to B<ssl>.
Options already set before are not cleared!
-SSL_CTX_clear_options() clears the options set via bitmask in B<options>
+SSL_CTX_clear_options() clears the options set via bit mask in B<options>
to B<ctx>.
-SSL_clear_options() clears the options set via bitmask in B<options> to B<ssl>.
+SSL_clear_options() clears the options set via bit mask in B<options> to B<ssl>.
SSL_CTX_get_options() returns the options set for B<ctx>.
@@ -45,7 +45,7 @@ Note, this is implemented via a macro.
=head1 NOTES
The behaviour of the SSL library can be changed by setting several options.
-The options are coded as bitmasks and can be combined by a bitwise B<or>
+The options are coded as bit masks and can be combined by a bitwise B<or>
operation (|).
SSL_CTX_set_options() and SSL_set_options() affect the (external)
@@ -161,7 +161,7 @@ the session. In this way the server can operate statelessly - no session
information needs to be cached locally.
The TLSv1.3 protocol only supports tickets and does not directly support session
-ids. However OpenSSL allows two modes of ticket operation in TLSv1.3: stateful
+ids. However, OpenSSL allows two modes of ticket operation in TLSv1.3: stateful
and stateless. Stateless tickets work the same way as in TLSv1.2 and below.
Stateful tickets mimic the session id behaviour available in TLSv1.2 and below.
The session information is cached on the server and the session id is wrapped up
@@ -340,13 +340,13 @@ and renegotiation between OpenSSL and unpatched clients or servers.
=head1 RETURN VALUES
-SSL_CTX_set_options() and SSL_set_options() return the new options bitmask
+SSL_CTX_set_options() and SSL_set_options() return the new options bit mask
after adding B<options>.
-SSL_CTX_clear_options() and SSL_clear_options() return the new options bitmask
+SSL_CTX_clear_options() and SSL_clear_options() return the new options bit mask
after clearing B<options>.
-SSL_CTX_get_options() and SSL_get_options() return the current bitmask.
+SSL_CTX_get_options() and SSL_get_options() return the current bit mask.
SSL_get_secure_renegotiation_support() returns 1 is the peer supports
secure renegotiation and 0 if it does not.
@@ -368,7 +368,7 @@ were added in OpenSSL 1.1.1.
=head1 COPYRIGHT
-Copyright 2001-2018 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/SSL_CTX_set_psk_client_callback.pod b/crypto/openssl/doc/man3/SSL_CTX_set_psk_client_callback.pod
index eb4e4f5fa424..0273ccb97a83 100644
--- a/crypto/openssl/doc/man3/SSL_CTX_set_psk_client_callback.pod
+++ b/crypto/openssl/doc/man3/SSL_CTX_set_psk_client_callback.pod
@@ -123,7 +123,9 @@ and it will use that in preference. If no such callback is present then it will
check to see if a callback has been set via SSL_CTX_set_psk_client_callback() or
SSL_set_psk_client_callback() and use that. In this case the B<hint> value will
always be NULL and the handshake digest will default to SHA-256 for any returned
-PSK.
+PSK. TLSv1.3 early data exchanges are possible in PSK connections only with the
+B<SSL_psk_use_session_cb_func> callback, and are not possible with the
+B<SSL_psk_client_cb_func> callback.
=head1 NOTES
@@ -133,7 +135,7 @@ A connection established via a TLSv1.3 PSK will appear as if session resumption
has occurred so that L<SSL_session_reused(3)> will return true.
There are no known security issues with sharing the same PSK between TLSv1.2 (or
-below) and TLSv1.3. However the RFC has this note of caution:
+below) and TLSv1.3. However, the RFC has this note of caution:
"While there is no known way in which the same PSK might produce related output
in both versions, only limited analysis has been done. Implementations can
@@ -166,7 +168,7 @@ were added in OpenSSL 1.1.1.
=head1 COPYRIGHT
-Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/SSL_CTX_set_read_ahead.pod b/crypto/openssl/doc/man3/SSL_CTX_set_read_ahead.pod
index ff037d938dcd..6d1e8bd5e8e9 100644
--- a/crypto/openssl/doc/man3/SSL_CTX_set_read_ahead.pod
+++ b/crypto/openssl/doc/man3/SSL_CTX_set_read_ahead.pod
@@ -21,7 +21,7 @@ SSL_CTX_get_default_read_ahead
=head1 DESCRIPTION
SSL_CTX_set_read_ahead() and SSL_set_read_ahead() set whether we should read as
-many input bytes as possible (for non-blocking reads) or not. For example if
+many input bytes as possible (for nonblocking reads) or not. For example if
B<x> bytes are currently required by OpenSSL, but B<y> bytes are available from
the underlying BIO (where B<y> > B<x>), then OpenSSL will read all B<y> bytes
into its buffer (providing that the buffer is large enough) if reading ahead is
@@ -64,7 +64,7 @@ L<ssl(7)>, L<SSL_pending(3)>
=head1 COPYRIGHT
-Copyright 2015-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2015-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/SSL_CTX_set_security_level.pod b/crypto/openssl/doc/man3/SSL_CTX_set_security_level.pod
index 0cb6c1f52a22..f85959e7c045 100644
--- a/crypto/openssl/doc/man3/SSL_CTX_set_security_level.pod
+++ b/crypto/openssl/doc/man3/SSL_CTX_set_security_level.pod
@@ -114,12 +114,6 @@ I<Documentation to be provided.>
=head1 NOTES
-B<WARNING> at this time setting the security level higher than 1 for
-general internet use is likely to cause B<considerable> interoperability
-issues and is not recommended. This is because the B<SHA1> algorithm
-is very widely used in certificates and will be rejected at levels
-higher than 1 because it only offers 80 bits of security.
-
The default security level can be configured when OpenSSL is compiled by
setting B<-DOPENSSL_TLS_SECURITY_LEVEL=level>. If not set then 1 is used.
@@ -180,7 +174,7 @@ These functions were added in OpenSSL 1.1.0.
=head1 COPYRIGHT
-Copyright 2014-2018 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2014-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/SSL_CTX_set_session_cache_mode.pod b/crypto/openssl/doc/man3/SSL_CTX_set_session_cache_mode.pod
index 18c9783fe0b2..38603f250dab 100644
--- a/crypto/openssl/doc/man3/SSL_CTX_set_session_cache_mode.pod
+++ b/crypto/openssl/doc/man3/SSL_CTX_set_session_cache_mode.pod
@@ -96,7 +96,7 @@ session caching (callback) that is configured for the SSL_CTX. This flag will
prevent sessions being stored in the internal cache (though the application can
add them manually using L<SSL_CTX_add_session(3)>). Note:
in any SSL/TLS servers where external caching is configured, any successful
-session lookups in the external cache (ie. for session-resume requests) would
+session lookups in the external cache (i.e. for session-resume requests) would
normally be copied into the local cache before processing continues - this flag
prevents these additions to the internal cache as well.
@@ -131,7 +131,7 @@ L<SSL_CTX_flush_sessions(3)>
=head1 COPYRIGHT
-Copyright 2001-2016 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/SSL_CTX_set_session_id_context.pod b/crypto/openssl/doc/man3/SSL_CTX_set_session_id_context.pod
index 4036d3c7b323..ccd37ba681d3 100644
--- a/crypto/openssl/doc/man3/SSL_CTX_set_session_id_context.pod
+++ b/crypto/openssl/doc/man3/SSL_CTX_set_session_id_context.pod
@@ -26,7 +26,7 @@ B<sid_ctx_len> within which a session can be reused for the B<ssl> object.
Sessions are generated within a certain context. When exporting/importing
sessions with B<i2d_SSL_SESSION>/B<d2i_SSL_SESSION> it would be possible,
to re-import a session generated from another context (e.g. another
-application), which might lead to malfunctions. Therefore each application
+application), which might lead to malfunctions. Therefore, each application
must set its own session id context B<sid_ctx> which is used to distinguish
the contexts and is stored in exported sessions. The B<sid_ctx> can be
any kind of binary data with a given length, it is therefore possible
@@ -82,7 +82,7 @@ L<ssl(7)>
=head1 COPYRIGHT
-Copyright 2001-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2001-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/SSL_CTX_set_session_ticket_cb.pod b/crypto/openssl/doc/man3/SSL_CTX_set_session_ticket_cb.pod
index f3dfb62c231c..aa520f4a6261 100644
--- a/crypto/openssl/doc/man3/SSL_CTX_set_session_ticket_cb.pod
+++ b/crypto/openssl/doc/man3/SSL_CTX_set_session_ticket_cb.pod
@@ -107,7 +107,7 @@ The return value can be any of these values:
The handshake should be aborted, either because of an error or because of some
policy. Note that in TLSv1.3 a client may send more than one ticket in a single
-handshake. Therefore just because one ticket is unacceptable it does not mean
+handshake. Therefore, just because one ticket is unacceptable it does not mean
that all of them are. For this reason this option should be used with caution.
=item SSL_TICKET_RETURN_IGNORE
@@ -177,12 +177,12 @@ L<SSL_get_session(3)>
=head1 HISTORY
-The SSL_CTX_set_session_ticket_cb(), SSSL_SESSION_set1_ticket_appdata()
+The SSL_CTX_set_session_ticket_cb(), SSL_SESSION_set1_ticket_appdata()
and SSL_SESSION_get_ticket_appdata() functions were added in OpenSSL 1.1.1.
=head1 COPYRIGHT
-Copyright 2017-2018 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2017-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/SSL_CTX_set_split_send_fragment.pod b/crypto/openssl/doc/man3/SSL_CTX_set_split_send_fragment.pod
index d63ca4157e09..d8fd3f5390c8 100644
--- a/crypto/openssl/doc/man3/SSL_CTX_set_split_send_fragment.pod
+++ b/crypto/openssl/doc/man3/SSL_CTX_set_split_send_fragment.pod
@@ -41,7 +41,7 @@ capability is known as "pipelining" within OpenSSL.
In order to benefit from the pipelining capability. You need to have an engine
that provides ciphers that support this. The OpenSSL "dasync" engine provides
-AES128-SHA based ciphers that have this capability. However these are for
+AES128-SHA based ciphers that have this capability. However, these are for
development and test purposes only.
SSL_CTX_set_max_send_fragment() and SSL_set_max_send_fragment() set the
@@ -178,7 +178,7 @@ and SSL_SESSION_get_max_fragment_length() functions were added in OpenSSL 1.1.1.
=head1 COPYRIGHT
-Copyright 2016-2019 The OpenSSL Project Authors. All Rights Reserved.
+Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the OpenSSL license (the "License"). You may not use
this file except in compliance with the License. You can obtain a copy
diff --git a/crypto/openssl/doc/man3/SSL_CTX_set_tlsext_servername_callback.pod b/crypto/openssl/doc/man3/SSL_CTX_set_tlsext_servername_callback.pod
index e971035734e1..0c21cfdb6bc7 100644
--- a/crypto/openssl/doc/man3/SSL_CTX_set_tlsext_servername_callback.pod
+++ b/crypto/openssl/doc/man3/SSL_CTX_set_tlsext_servername_callback.pod
@@ -51,7 +51,7 @@ value is initialised to SSL_AD_UNRECOGNIZED_NAME.
=item SSL_TLSEXT_ERR_ALERT_WARNING
If this value is returned then the servername is not accepted by the server.
-However the handshake will continue and send a warning alert instead. The value
+However, the handshake will continue and send a warning alert instead. The value
of the alert should be stored in the location pointed to by the B<al> parameter
as for SSL_TLSEXT_ERR_ALERT_FATAL above. Note that TLSv1.3 does not support
warning alerts, so if TLSv1.3 has been negotiated then this return value is
@@ -88,7 +88,7 @@ Otherwise it returns NULL.
=item On the client, during or after the handshake and a TLSv1.2 (or below)
resumption occurred
-If the session from the orignal handshake had a servername accepted by the
+If the session from the original handshake had a servername accepted by the
server then it will return that servername.
Otherwise it returns the servername set via SSL_set_tlsext_host_name() or NULL
@@ -157,12 +157,12 @@ corner cases. This has been fixed from OpenSSL 1.1.1e.
Prior to 1.1.1e, when the client requested a servername in an initial TLSv1.2
handshake, the server accepted it, and then the client successfully resumed but
-set a different explict servername in the second handshake then when called by
+set a different explicit servername in the second handshake then when called by
the client it returned the servername from the second handshake. This has now
been changed to return the servername requested in the original handshake.
Also prior to 1.1.1e, if the client sent a servername in the first handshake but
-the server did not accept it, and then a second handshake occured where TLSv1.2
+the server did not accept it, and then a second handshake occurred where TLSv1.2
resumption was successful then when called by the server it returned the
servername requested in the original handshake. This has now been changed to
NULL.
diff --git a/crypto/openssl/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod b/crypto/openssl/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod
index 43bddc51e8cf..b2637efc1a72 100644
--- a/crypto/openssl/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod
+++ b/crypto/openssl/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod
@@ -136,6 +136,8 @@ Reference Implementation:
unsigned char *iv, EVP_CIPHER_CTX *ctx,
HMAC_CTX *hctx, int enc)
{
+ your_type_t *key; /* something that you need to implement */
+
if (enc) { /* create new session */
if (RAND_bytes(iv, EVP_MAX_IV_LENGTH) <= 0)
return -1; /* insufficient random */
@@ -154,21 +156,22 @@ Reference Implementation:
}
memcpy(key_name, key->name, 16);
- EVP_EncryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL, key->aes_key, iv);
- HMAC_Init_ex(&hctx, key->hmac_key, 16, EVP_sha256(), NULL);
+ EVP_EncryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, key->aes_key, iv);
+ HMAC_Init_ex(&hctx, key->hmac_key, 32, EVP_sha256(), NULL);
return 1;
} else { /* retrieve session */
- key = findkey(name);
+ time_t t = time(NULL);
+ key = findkey(key_name); /* something that you need to implement */
- if (key == NULL || key->expire < now())
+ if (key == NULL || key->expire < t)
return 0;
- HMAC_Init_ex(&hctx, key->hmac_key, 16, EVP_sha256(), NULL);
- EVP_DecryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL, key->aes_key, iv);
+ HMAC_Init_ex(&hctx, key->hmac_key, 32, EVP_sha256(), NULL);
+ EVP_DecryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, key->aes_key, iv);
- if (key->expire < now() - RENEW_TIME) {
+ if (key->expire < t - RENEW_TIME) { /* RENEW_TIME: implement */
/*